Solaris上でman 2 flockすると分かるのですが、どうやら
いくつかのバージョンのSolarisのflockは、NFSなどネッ
トワーク越しのロックがうまく働かないようです。
> % uname -a
> SunOS 4.1.4-JL 2 sun4m
の、man 2 flockから。
> BUGS
> Locks obtained through the flock() mechanism are known only
> within the system on which they were placed. Thus, multiple
> clients may successfully acquire exclusive locks on the same
> remote file. If this behavior is not explicitly desired,
> the fcntl(2V) or lockf(3) system calls should be used
> instead; these make use of the services of the network lock
> manager (see lockd(8C)).
要するに、flockだと、ネットワーク越しの場合一度に複
数のクライアントが同一のファイルに対して排他ロックに
成功してしまうので、代わりにfcntl(2V)やlock(3)を使う
必要がある、ということです。
#Solaris付属の日本語版マニュアルは訳がちょっと変で
#す。csh上でunsetenv LANGして原文を参照しました。
で、ちょっと調べてみたのですが、
http://www.att.or.jp/perl/faq/newfaq5j.html#newfaq5_how_13
http://www.chuo-u.ac.jp/doc/perl5/perlfaq5/How_can_I_lock_a_file_.html
この問題を回避するには、Perl5の場合、Configureを走ら
せる際に、-Ud_flockを指定してflockを使わないよう
に明示的にPerl5を再構築する必要があります。
% ./Configure -Ud_flock
Perlを再構築せずにNFS越しのロックを行う為には、
Perlのfcntl関数を使う方法や、CPANにあるFile::Lockを
使う方法などがあるようです。
私は仕事ではSolarisはあまり使わないのでこの件に関し
ては疎いのですが、詳しい方がいらっしゃいましたらフォ
ローお願いします。