perl - 第二次使用 open 时文件锁会保留吗?

标签 perl file file-io

假设:

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/

相关文章:

Java - 文件读/写

java - 如何使用 JFileChooser 将 .txt 文件保存在所需位置

perl - Perl FIRSTKEY和NEXTKEY如何工作

perl - opensuse-linux 12.1上的mozrepl在安装过程中带来麻烦

java - 使用Java删除具有扩展名的所有文件

java - scala删除所有文件但不删除目录

perl - 如何使用 perl 转换 base64 编码的文件?

perl: 为什么\(1,2) 是标量?如何取消引用它?

c - fatal error : No such file or directory for header file

c - 最大数量 "C"