假设:
my $fh;
open $fh, ">>", "file.txt";
flock($fh, LOCK_EX);
open $fh, "+<", "file.txt";
close $fh;
文件锁是保留还是释放?如果它会被释放,有没有办法让它留下来? 我云没有找到相关资料。
最佳答案
调用 open
在已分配给打开的文件描述符的文件句柄上,对文件句柄执行隐式关闭。关闭锁定的文件句柄会释放锁定。
我不清楚您在两种不同模式下打开具有相同文件句柄的相同文件是想做什么。如果您使用第二个文件句柄怎么办?
open my $fh, ">>", "file.txt";
flock($fh, LOCK_EX);
open my $fh2, "+<", "file.txt";
... rewrite 'file.txt' with $fh2 ...
close $fh2; # done with rewrite
close $fh; # done with lock
看起来像flock
因 +<
中的文件而受到尊重模式(适用于 Linux,这可能不可移植),所以有了那个和一些 seek
语句,你只需要一个文件句柄。
# make sure file exists before you use '+<' mode
{ open my $touch,'>>','file.txt'; }
open my $fh, '+<', 'file.txt';
flock $fh, LOCK_EX;
seek $fh, 0, 2;
print $fh 'stuff for the end of the file';
seek $fh, 0, 0;
print $fh 'something for the start of the file';
close $fh; # releases lock
关于perl - 第二次使用 open 时文件锁会保留吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29308727/