« PSPでPS1! | メイン | 商標権 »
September 28, 2006
flockの使い方
mixiのPerlコミュでも話題になっていたのですが(ちょっと前だけど)、flockで排他制御をかける際の正しい方法はみたいなことが書かれていて、そういえば僕もPerlCookBookに書いてあることを信じて、こういう使い方をしていたのですが
追記の場合:open(OUT, ">>data.txt") or die; flock(OUT, LOCK_EX); my $line = "hello world!\n"; print OUT $line; close(OUT);
どうもこれだけでは、不十分らしい。
open(OUT, ">>data.txt")で追記モードで開いた際に他のプロセスが書き込みをしていると、末尾がずれるそうでseek(OUT,2);を指定してprintする前に末尾にポインタを移動させる必要があるようです。
なので、正しくはこう、
open(OUT, ">>data.txt") or die; flock(OUT, 2); seek(OUT, 0, 2); my $line = "hello world!\n"; print OUT $line; close(OUT);
Bestなやり方はやっぱりLockFileと書き込むファイルは別々にすべきなのでしょうが。
- 参考にさせてもらったページ
- Perlの排他制御
- CGI(Perl)ファイル処理 その4:「ファイルロック:flock 後編」
- flock考
Author nitoka : September 28, 2006 10:25 AM
TrackBack
TrackBack URL:
http://www.nitoka.net/blog/mt-tb.cgi/211


