Perl Open和Flock超时

时间:2017-03-20 21:45:57

标签: perl flock

Perl中的“open”函数是否会自动检查文件是否被锁定并等待它被解锁?如果是这样,它等待多长时间或我如何控制那段时间?

我有5个分叉进程将数据附加到同一个文件。每个分叉进程基本上打开文件,然后将其聚集。然后它会附加其数据并关闭文件处理程序以解锁文件,以便其他分叉进程可以使用它。

一切都按预期工作,但我担心如果其中一个分叉进程花费太长时间来完成其任务,open命令可能会超时。

2 个答案:

答案 0 :(得分:8)

flock仅阻止使用flock获取锁定;它不会阻止文件被打开,读取或修改。

没有flock标志的

LOCK_NB将被阻止,直到可以获得锁定,或者直到被信号中断为止。

带有flock标志的

LOCK_NB将立即返回。

  • 如果flock能够获得锁定,则会返回true。
  • 如果flock无法获得锁定,则会返回false,并设置errno
    • $!{EINTR}表示操作被信号中断。
    • $!{EWOULDBLOCK}表示需要等待,但已指定LOCK_NB

答案 1 :(得分:2)

不,open根本不与锁互动。锁定文件只会阻止其他人锁定它,没有别的。