Perl中的“open”函数是否会自动检查文件是否被锁定并等待它被解锁?如果是这样,它等待多长时间或我如何控制那段时间?
我有5个分叉进程将数据附加到同一个文件。每个分叉进程基本上打开文件,然后将其聚集。然后它会附加其数据并关闭文件处理程序以解锁文件,以便其他分叉进程可以使用它。
一切都按预期工作,但我担心如果其中一个分叉进程花费太长时间来完成其任务,open命令可能会超时。
答案 0 :(得分:8)
flock
仅阻止使用flock
获取锁定;它不会阻止文件被打开,读取或修改。
flock
标志的 LOCK_NB
将被阻止,直到可以获得锁定,或者直到被信号中断为止。
flock
标志的 LOCK_NB
将立即返回。
flock
能够获得锁定,则会返回true。flock
无法获得锁定,则会返回false,并设置errno
。
$!{EINTR}
表示操作被信号中断。$!{EWOULDBLOCK}
表示需要等待,但已指定LOCK_NB
。答案 1 :(得分:2)
不,open
根本不与锁互动。锁定文件只会阻止其他人锁定它,没有别的。