gpt4 book ai didi

perl - 无法让 Perl 的羊群工作

转载 作者:行者123 更新时间:2023-12-03 18:13:54 28 4
gpt4 key购买 nike

我似乎无法制作 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 - 无法让 Perl 的羊群工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5267019/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com