- ベストアンサー
Perlでロック不具合?
Perlを使用して、掲示板のようなものをつくり、ずっと稼動させていましたが、 今日、データが消えてしまいました。 データのファイルサイズがゼロになっていました。 ファイルの書込み時には、flockを使用してロックをかけています。 #--ロック flock LOCK,2; #--アンロック flock LOCK,8; どのような原因が考えられますでしょうか? flockが使用できることは、別途スクリプトを作って確認済みです。 環境 SuSE linux 9 Perl v5.8.3 書込みが最大で1日に30件程度 宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
flockでファイルロックを制御できるのは、あくまでflockを使ったファイルハンドルだけです。 flockを使わないファイルアクセスにはロックが利きません。 ファイルの読み込み時にflockを使わずに読んでいませんか? flockを使ったファイル書き込み中にflockを使わないファイル読み込みがあった場合、flockを素通りして書きかけのファイルを読めてしまいます。 おそらくこれが今回ファイルが壊れた原因です。 これに対処するには書き込みだけでなく、読み込み時のファイルアクセスにもflockをかけるといいでしょう。 読み込み時は共有ロック( flock LOCK 1 )でいいでしょう。 また、バッファリングを無効にする( $| = 1 )にすることでファイル書き込みの途中でロックが解除されてしまう現象も回避できます。 あわせて対策しておくといいでしょう。
お礼
回答ありがとうございます。 バッファを無効にする、というのは知らなかったです。参考になります。 で、言いづらいのですが、自己解決で、 サーバーのストレージの空きが0%になっていたことが原因でした。 お騒がせしてすみません。