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を使ってロックしなくてはなりません。