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()
是一个系统调用;内核跟踪锁。