flock
flock FILEHANDLE, OPERATION
FILEHANDLEと紐付いているファイルをロックします。
ブロックモードでロックを行うと他のプログラムが既にロックを行っていた場合にそのロックが解除されるまで待ちます。非ブロックモードでロックを行うと、既にロックされていた場合ロック失敗ですぐに終了します。
OPERATIONには以下の値を設定することができます。
use Fcntl ':flock';を行うことで、OPERATIONに数字の代わりにLOCK_*を使用することができます。数字とLOCK_*の対応は以下の通りです。
数字 | LOCK_* | 意味 |
---|---|---|
1 | LOCK_SH | 共有ロック(ブロックモード) |
2 | LOCK_EX | 排他ロック(ブロックモード) |
5 | LOCK_SH | LOCK_NB | 共有ロック(非ブロックモード) |
6 | LOCK_EX | LOCK_NB | 排他ロック(非ブロックモード) |
8 | LOCK_UN | ロック解除 |
サンプルプログラム
use strict; use warnings; use Fcntl ':flock'; my $file = 'counter.dat'; open my $fh, "+<", $file or die "$!:$file"; flock $fh, LOCK_EX; my $count = <$fh>; $count++; seek $fh, 0, 0; print $fh $count; close $fh;
関連項目
・close関数・open関数