实现可移植文件锁定机制

Nig*_*ott 8 linux lockfile

我已经实现了一个文件锁定机制,沿着linux手册页中"open"的建议,其中指出:

想要使用lockfile执行原子文件锁定的可移植程序,并且需要避免依赖对O_EXCL的NFS支持,可以在同一文件系统上创建一个唯一的文件(例如,合并主机名和PID),并使用link(2)来建立一个锁定文件的链接.如果link(2)返回0,则锁定成功.否则,在唯一文件上使用stat(2)来检查其链接计数是否已增加到2,在这种情况下锁定也是成功的.

这似乎完美无缺,但是为了在我的测试中获得100%的代码覆盖率,我需要覆盖链接数增加到2的情况.

我已经尝试使用谷歌搜索,但我似乎能够找到的所有内容都是上面反复引用的"它完成的方式".

任何人都可以向我解释一下哪些情况会导致链接失败(返回-1),但链接数增加到2?

小智 2

Linux 程序员手册的 link(2) 页底部提供了您问题的答案:

   On NFS file systems, the return code may  be  wrong  in  case  the  NFS
   server  performs  the link creation and dies before it can say so.  Use
   stat(2) to find out if the link got created.
Run Code Online (Sandbox Code Playgroud)