とあるエンジニアの闇歴史帳

コピペで使える便利Wiki ※現在構築中です。

ユーザ用ツール


サイドバー

言語

サーバ関連

ツール

API

読み物

その他

perl:file_open_modea

1回のファイルオープンで読み書きを同時にする - Perl

この記事は2006年10月04日に書かれたものです。

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);

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

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

関連書籍

failed to fetch data: unkown error

failed to fetch data: unkown error

関連ページ

perl/file_open_modea.txt · 最終更新: 2020/06/23 14:10 (外部編集)