« 特定の項目でソートする (Perl, リスト, 並べ変え) | メイン | 文字列中のURLを自動的にリンクさせたい (Perl, 置換, URL, リンク) »

カテゴリー:ファイル 

1回のファイルオープンで読み書きを同時にしたい (Perl, file, read/write)

このエントリーを含むはてなブックマーク  livedoorクリップ  1回のファイルオープンで読み書きを同時にしたい (Perl, file, read/write)をdel.icio.usに追加  1回のファイルオープンで読み書きを同時にしたい (Perl, file, read/write)をYahoo!ブックマークに追加  1回のファイルオープンで読み書きを同時にしたい (Perl, file, read/write)をニフティクリップに追加

open関数でファイルを開き、読み書きを同時に行いたい場合はどうすれば良いだろうか?これを解決するには単純にファイルの読み書きモードを使用すれば良い。

#-------------------------------
#読み書きモードで開く
#-------------------------------
open(DAT, "+<file.txt");
flock(DAT, 2); # flockでロックをすれば読み書き両方がロック出来る

#-------------------------------
#ファイル読込
#-------------------------------
$buff = <DAT>;
# @buff = <DAT>;

#-------------------------------
#ファイルに記録
#-------------------------------
truncate(DAT, 0); #ファイルサイズを0byteに
seek(DAT, 0, 0); #書き込む場所をファイルの先頭に
print DAT "Hello!"; #ファイルに記録
close(DAT);


例えばアクセスカウンターなどを作成した際にファイルロックが不十分だと、現在の値を読込むためにファイルを開き閉じる、その後書き込みむためにファイルを開き...という処理を行っていると、読み書きの間に他のプロセスが発生した場合に不整合が発生する可能性がある。

もちろん、これ以外にも解決方法はあるが、ひとつの解法として覚えておいて損はない。




トラックバック

このエントリーのトラックバックURL:
http://katsubemakito.net/mt/mt-tb.cgi/321

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

VPSレンタルサーバー




クリエイティブ・コモンズ・ライセンス
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.