flock FILEHANDLE, OPERATION
引数FILEHANDLE
に対応するファイルのロックや解除を行います。成功時には"真"を、失敗時には"偽"を返します。この関数はシステムコマンドのflock
/lockf
/fcntl
のうち、システムがサポートしているものを呼び出します。flock
システムコールが実装されていないマシンでの実行は、致命的エラーとなります。
BSDシステムでのメールボックスへの追加処理
$LOCK_SH = 1; $LOCK_EX = 2; $LOCK_NB = 4; $LOCK_UN = 8; sub lock { flock(MBOX,$LOCK_EX); # さらに、待っている間に書き足した # 人がいるといけないので ... seek(MBOX, 0, 2); } sub unlock { flock(MBOX,$LOCK_UN); } open(MBOX, ">>/usr/spool/mail/$ENV{'USER'}") or die "Can't open mailbox: $!"; lock(); print MBOX $msg,"\n\n"; unlock();
flock
ではネットワークをまたがって、ロックは行なえません。このためには、fcntl
を使ってロックしなくてはなりません。