为什么flock(1)可以做进程间锁?

为什么flock(1)可以做进程间锁?

flock 与 open-file-description 相关联,并且 open(2) 创建新的 open-file-description。因此,在两个单独的 shell 中调用集群(1)将分别打开锁定文件并产生两个打开文件描述。集群(1)如何知道与每个打开文件描述相关的锁定状态?我很困惑...另外,flock(1) 是否以不同的方式对待路径名和文件描述符?

更新:

我说的羊群是Linux下的羊群。

根据我的理解,代表集群的结构在系统范围内是唯一的。一个或多个打开文件描述可以引用一个flock结构(如打开文件描述和i节点之间的关系)。是我的'猜测'正确的?

答案1

flock,它是系统调用的包装器flock(),锁定文件,而不是文件描述符。

OpenBSD 手册flock()说(我的重点):

flock()应用或删除咨询锁在文件上与文件描述符相关联fd

[...]

锁位于文件上,而不是文件描述符上。 也就是说,文件描述符重复dup(2)fork(2)不会导致锁的多个实例,而是导致对单个锁的多个引用。如果持有文件锁的进程分叉并且子进程显式解锁该文件,则父进程将失去其锁。

flock()是一个系统调用;内核跟踪锁。

相关内容