【Perl】ファイルロック(排他処理)について語ろうat PHP【Perl】ファイルロック(排他処理)について語ろう - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト832:nobodyさん 05/10/09 23:29:44 nlo5+ZWx BE:169416465-## >>828 はなしにならんな。 あきれたよ。もう実家に帰る! 833:nobodyさん 05/12/08 21:09:42 pHM0ErCM perlを始めて3ヶ月位ですが、ファイルロックに ついて自分なりに色々と試行錯誤した結果、以下の ようなルーチンを作りました。 flockが使える事が前提ですが、何か欠点や改良点が あれば指摘して頂けるとありがたいです。 filelock.pl package filelock; our %_lock; sub END { foreach my $file ( keys %_lock ) { close( $_lock{$file}{'handle'} ); unlink( $_lock{$file}{'name'} ); if( $_lock{$file}{'tmp'} ) { rename( $_lock{$file}{'tmp'}, $file ); } } } sub readOpen { my ( $file ) = @_; my ( $handle ); _append( $file ); if( !open( $handle, "<$file" )) { return undef; } return $handle; } 834:nobodyさん 05/12/08 21:10:10 pHM0ErCM sub writeOpen { my ( $file ) = @_; my ( $handle ); _append( $file ); if( !$_lock{$file}{'tmp'} ) { $_lock{$file}{'tmp'} = $file; $_lock{$file}{'tmp'} =~ s/(.*)\.(.*)/$1\.tmp/; } if( !open( $handle, ">$_lock{$file}{'tmp'}" )) { return undef; } return $handle; } sub _append { my ( $file ) = @_; if( $_lock{$file} ) { return; } $_lock{$file}{'name'} = $file; $_lock{$file}{'name'} =~ s/(.*)\.(.*)/$1\.lck/; open( $_lock{$file}{'handle'}, ">$_lock{$file}{'name'}" ); my $count = 0; while( !flock( $_lock{$file}{'handle'}, 2 )) { sleep( 1 ); if( $count++ > 10 ) { print '[error]Sarver Busy.'; exit; } } } 1; 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch