解决方法
如果你最终使用flock,这里有一些代码来做:
use Fcntl ':flock'; # Import LOCK_* constants # We will use this file path in error messages and function calls. # Don't type it out more than once in your code. Use a variable. my $file = '/path/to/some/file'; # Open the file for appending. Note the file path is quoted # in the error message. This helps debug situations where you # have a stray space at the start or end of the path. open(my $fh,'>>',$file) or die "Could not open '$file' - $!"; # Get exclusive lock (will block until it does) flock($fh,LOCK_EX) or die "Could not lock '$file' - $!"; # Do something with the file here... # Do NOT use flock() to unlock the file if you wrote to the # file in the "do something" section above. This could create # a race condition. The close() call below will unlock the # file for you,but only after writing any buffered data. # In a world of buffered i/o,some or all of your data may not # be written until close() completes. Always,always,ALWAYS # check the return value of close() if you wrote to the file! close($fh) or die "Could not write '$file' - $!";
一些有用的链接:
> PerlMonks file locking tutorial(有点老)
> flock()
documentation
为了回应您的补充问题,我会说,将文件锁定在文件上,或者在文件被锁定时创建一个你称之为“锁定”的文件,当它不再被锁定时将其删除(然后确保你的程序服从那些语义)。