在Linux上锁定NFS文件时如何避免有问题/未定义的行为?

时间:2014-09-03 01:25:31

标签: linux nfs file-locking

我过去曾使用flock()和fcntl(),但我一直担心某些旧版Linux的行为未定义或有问题。

我需要一个兼容旧版Linux-es(例如2.6.18或更高版本)和NFS 3 +的解决方案。

flock()和/或fcntl()会在这种情况下一直工作,还是我需要求助于打开(.... O_EXCL)来保证原子性?

2 个答案:

答案 0 :(得分:1)

您绝对不能指望flock()与NFS一起使用。如果您在一个流程中有多种用途,fcntl() F_SETLK {{1}}有很好的工作机会,可以提出警告:http://0pointer.de/blog/projects/locking.html

答案 1 :(得分:0)

从历史上看,flock至少可以使用十年,并且自2.0以来由内核实现。来自flock man page

  

从内核2.0开始,flock()作为系统调用实现   正确而不是在GNU C库中模拟作为调用   的fcntl(2)。这产生了真正的BSD语义:没有交互   flock()和fcntl(2)放置的锁类型和flock()之间的关系   没有检测到死锁。

我认为它将满足您的需求,除非您正在处理2.0之前的内核。