【发布时间】:2019-07-30 23:57:55
【问题描述】:
我可以使用文件句柄打开文件,但是当我尝试使用相同的文件句柄进行 FLOCK 时,我得到“错误的文件描述符”。
my $file='/Library/WebServer/Documents/myFile.txt';
open(my $fh, '>', $file) or die "Could not open '$file' - $!";
# I DO NOT GET AN ERROR FROM OPENING THE FILE
flock($fh, LOCK_EX) or die "Could not lock '$file' - $!";
# HERE IS WHERE I GET THE "BAD FILE DESCRIPTOR" ERROR
# IF I COMMENT THIS LINE OUT, THE PRINT AND CLOSE COMMANDS BELOW EXECUTE NORMALLY
print $fh "hello world";
close($fh) or die "Could not write '$file' - $!";
这是同一个文件句柄,为什么 OPEN 和 PRINT 有效,而 FLOCK 无效?我尝试将文件的权限设置为 646、666 和 777,但我总是得到相同的结果。
谢谢!
【问题讨论】:
-
use strict; use warnings; -
总是使用
use strict; use warnings;。它会发现你的问题。 -
你应该得到
Invalid argument而不是Bad file descriptor。 -
为什么要锁定一个新文件?如果该文件已经存在,那么您在获得锁之前正在破坏它,这意味着即使另一个进程已锁定它,您也在破坏它。所以要么你在做一些奇怪的事情,要么是做错了什么。很可能是后者。
标签: perl descriptor flock