解决方法
如果你最终使用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
为了回应您的补充问题,我会说,将文件锁定在文件上,或者在文件被锁定时创建一个你称之为“锁定”的文件,当它不再被锁定时将其删除(然后确保你的程序服从那些语义)。