- ベストアンサー
ファイルの破壊について
2人以上の方が同時にファイルの書き込みをすると ログファイルが白紙になったりエラーが起こってしまうらしく、それを防ぐために以下のような書式が open(OUT, "> file.txt"); flock(OUT, 2); print OUT ".......\n"; close(OUT); # closeすると自動的にアンロックされる とほほのWWW入門で記載されていたんですが、このロック方法で本当に大丈夫なのでしょうか とほほさんの解説があまりにも漠然としていて信じがたいんです。 詳しい方、上の方法でも十分かどうかご教授よろしくお願いします。 http://www.tohoho-web.com/wwwperl3.htm#Lock
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私もそのようにしていましたが、特に問題ありませんでした HPのアクセスカウンターで現在の数字を保存させるのに 使ったときですが、flockをしないと、 何回かに一回、壊れてしまいましたが、 flockをしておけば、今のところ壊れたということはありません そんなに頻繁にアクセスされるサイトではないので、 もっと頻繁になったときの保証はできませんが
その他の回答 (1)
- zebedeer
- ベストアンサー率66% (80/121)
回答No.2
他の部分の記述方法、動作環境にもよりますが、 上記内容では不十分な場合があります。 たとえば以下のような場合 問題が起こる可能性があります。 1、プロセスAのopenによりファイル内容が削除される。 2、プロセスBが空白のファイルを読み込む。 3、プロセスAがflockを実行。 詳しくは参考URLをどうぞ。
質問者
お礼
難しそうですね^^; mkdirを使ってみようと思います。 ありがとうございました。
補足
ありがとうございます。 もうひとつ質問ですが、 flock(OUT,**); の**の部分には何を入れればいいのでしょうか サンプルでは「2」が入ってますけど よろしくお願いします