无法让Perl的群体工作

前端之家收集整理的这篇文章主要介绍了无法让Perl的群体工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我似乎无法制作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上运行

猜你在找的Perl相关文章