【Perl】ファイルロック(排他処理)について語ろうat PHP【Perl】ファイルロック(排他処理)について語ろう - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト844:nobodyさん 05/12/09 21:41:26 >>843 「ファイルを変更する(可能性がある)場合に排他ロック、読むだけで済む場合は共有ロック」 というのはひとつのセオリーだけれども、なぜそれがセオリーなのか、そもそもファイルロックとは何なのかを調べるなどして考えてみましょう。 >readしかしない場合でも排他的にロックしてしまうのは嬉しくない。 という >>842 の指摘にはまったく同意で、デメリットはいくらも思いつくけれど残念ながらメリットはひとつも思い浮かびません。 見境なしに排他ロックというのではファイルロックの魅力が半減以下です。 またファイルを利用している、いないに関わらずロックを離さないというのはお行儀が今ひとつ。各プロセスの実行時間が充分に短く、また起動頻度が比較的低ければ問題は出づらいでしょうけれど、少なくとも誰かに勧めることができるやり方じゃないですね。 845:833 05/12/09 22:03:55 色々な意見を参考に作り直してみました。 前作にあったバグ(read→write→readした時に*.tmpファイルから 読まない)も修正しています。 open パラメータ:通常のopenと一緒だけど使えるのは'>'と'<'のみ。 戻り値:ファイルハンドル 機能:指定されたファイルの拡張子をlckに変えたファイルを flockして指定されたファイルをオープン。flockが10秒以上で きない場合は異常終了。 close パラメータ:openで得られたファイルハンドルとオプション。 機能 : 指定されたファイルハンドルを閉じます。オプションで 1を指定するとロックを解除して書き込みがある場合はリネーム して反映。2を指定するとロックを解除して書き込みがある場合 は*.tmpファイルを削除(つまり書き込みをキャンセル) END 機能 : *.lckをclose&unlink。*.tmpがある場合は、元のファイ ル名にリネーム。 package filelock; our %_FileList; our %_HandleList; sub END { foreach my $filename ( keys %_FileList ) { if( $_FileList{$filename}{'temp'} ) { rename( $_FileList{$filename}{'temp'}, $filename ) } unlink( $_FileList{$filename}{'lock'} ); close( $_FileList{$filename}{'handle'} ); } } 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch