5部 関数リファレンス

flock

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

関連記事