• ベストアンサー

ファイルの破壊について

2人以上の方が同時にファイルの書き込みをすると ログファイルが白紙になったりエラーが起こってしまうらしく、それを防ぐために以下のような書式が open(OUT, "> file.txt"); flock(OUT, 2); print OUT ".......\n"; close(OUT); # closeすると自動的にアンロックされる とほほのWWW入門で記載されていたんですが、このロック方法で本当に大丈夫なのでしょうか とほほさんの解説があまりにも漠然としていて信じがたいんです。 詳しい方、上の方法でも十分かどうかご教授よろしくお願いします。 http://www.tohoho-web.com/wwwperl3.htm#Lock

質問者が選んだベストアンサー

  • ベストアンサー
  • kobold
  • ベストアンサー率62% (20/32)
回答No.1

私もそのようにしていましたが、特に問題ありませんでした HPのアクセスカウンターで現在の数字を保存させるのに 使ったときですが、flockをしないと、 何回かに一回、壊れてしまいましたが、 flockをしておけば、今のところ壊れたということはありません そんなに頻繁にアクセスされるサイトではないので、 もっと頻繁になったときの保証はできませんが

is_may
質問者

補足

ありがとうございます。 もうひとつ質問ですが、 flock(OUT,**); の**の部分には何を入れればいいのでしょうか サンプルでは「2」が入ってますけど よろしくお願いします

その他の回答 (1)

  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.2

他の部分の記述方法、動作環境にもよりますが、 上記内容では不十分な場合があります。 たとえば以下のような場合 問題が起こる可能性があります。 1、プロセスAのopenによりファイル内容が削除される。 2、プロセスBが空白のファイルを読み込む。 3、プロセスAがflockを実行。 詳しくは参考URLをどうぞ。

参考URL:
http://homepage1.nifty.com/glass/tom_neko/web/web_04.html
is_may
質問者

お礼

難しそうですね^^; mkdirを使ってみようと思います。 ありがとうございました。

関連するQ&A