回答編集履歴
3
さらにスメルを感じた
test
CHANGED
@@ -63,3 +63,29 @@
|
|
63
63
|
`LOCK_UN` はせずに fclose での(カーネルによる)暗黙のアンロックに任せるか、flock の前に fflush する必要があります。
|
64
64
|
|
65
65
|
|
66
|
+
|
67
|
+
---
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
```lang-php
|
72
|
+
|
73
|
+
$old_file = fopen('bbs.dat', 'rb');
|
74
|
+
|
75
|
+
$new_file = fopen('bbs.tmp', 'wb');
|
76
|
+
|
77
|
+
flock($old_file, LOCK_SH);
|
78
|
+
|
79
|
+
flock($new_file, LOCK_EX);
|
80
|
+
|
81
|
+
```
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
ここも危険な香りがします。
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
`bbs.tmp` は新規ファイルだから `wb` で開いて大丈夫だと思って参考書はそうなっているのでしょうけど、このプロセスが2本同時に実行されたら、1本目のプロセスが作成した `bbs.tmp` を2本目のプロセスが上書きしてしまう可能性があります。
|
90
|
+
|
91
|
+
|
2
fclose の補足
test
CHANGED
@@ -60,6 +60,6 @@
|
|
60
60
|
|
61
61
|
この部分とかとても危険です、flock から fclose までに無防備な時間があります。
|
62
62
|
|
63
|
-
`LOCK_UN` はせずに fclose による暗黙のアンロックに任せるか、flock の前に fflush する必要があります。
|
63
|
+
`LOCK_UN` はせずに fclose での(カーネルによる)暗黙のアンロックに任せるか、flock の前に fflush する必要があります。
|
64
64
|
|
65
65
|
|
1
追記
test
CHANGED
@@ -33,3 +33,33 @@
|
|
33
33
|
|
34
34
|
|
35
35
|
どのような参考書をお使いなのかわかりませんが、このような質の低いコードがサンプルとして記載された参考書は参考にしないほうが良いと思います。
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
---
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
質問と直接関係ありませんが。。。
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
```lang-php
|
48
|
+
|
49
|
+
flock($new_file, LOCK_UN);
|
50
|
+
|
51
|
+
flock($old_file, LOCK_UN);
|
52
|
+
|
53
|
+
fclose($new_file);
|
54
|
+
|
55
|
+
fclose($old_file);
|
56
|
+
|
57
|
+
```
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
この部分とかとても危険です、flock から fclose までに無防備な時間があります。
|
62
|
+
|
63
|
+
`LOCK_UN` はせずに fclose による暗黙のアンロックに任せるか、flock の前に fflush する必要があります。
|
64
|
+
|
65
|
+
|