我似乎无法制作Perl的
我正在锁定一个文件,检查返回值以确保它实际上已被锁定,而且我仍然可以打开并写入它,就像没有任何事情一样.
flock
工作.
我正在锁定一个文件,检查返回值以确保它实际上已被锁定,而且我仍然可以打开并写入它,就像没有任何事情一样.
这是我如何锁定文件
#!/usr/bin/perl -w use strict; use Fcntl ':flock'; $| = 1; my $f = $ARGV[0]; open( my $fh,'>>',$f ) or die "Could not open '$f' - $!"; print "locking '$f'..."; flock($fh,LOCK_EX) or die "Could not lock '$f' - $!"; print "locked\n"; sleep 10; print "waking up and unlocking\n"; close( $fh );
当该脚本处于休眠状态时,我可以使用来自不同进程的相同文本文件
#!/usr/bin/perl -w use strict; my $f = $ARGV[0]; open( my $fh,$f ) or die "Could not open '$f' - $!"; print $fh "This line was appended to a locked file!\n"; close( $fh );
解决方法
flock()是一个咨询锁.你必须使用flock()拥有所有进程
还要意识到你调用flock()的方式会阻塞,直到它可以锁定.如果您想要失败,您还必须使用LOCK_NB标志.
open(my $lf,">>fileIWantToLockOn"); my $gotLock = flock($lf,LOCK_EX | LOCK_NB); unless ($gotLock) { print "Couldn't get lock. Exiting"; exit 0; }
编辑:另请注意,flock()将无法在NFS上运行