Perl Open 和 Flock 超时

Perl Open and Flock timeout

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

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

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

不,open 根本不与锁交互。锁定文件只是防止其他人锁定它,没有别的。

flock 仅防止使用 flock 获取锁;它不会阻止文件被打开、读取、修改或删除。

flock 没有 LOCK_NB 标志将阻塞,直到可以获得锁,或者直到被信号中断。

flock 带有 LOCK_NB 标志将立即 return。

  • 如果 flock 能够获得锁,它将 return 为真。
  • 如果flock无法获得锁,它将return false,并设置errno
    • $!{EINTR}表示操作被信号中断。
    • $!{EWOULDBLOCK} 表示需要等待,但指定了 LOCK_NB