【问题标题】:How to avoid problematic/undefined behavior when locking NFS files on Linux?在 Linux 上锁定 NFS 文件时如何避免有问题/未定义的行为?
【发布时间】:2014-09-03 01:25:31
【问题描述】:

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

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

flock() 和/或 fcntl() 在这些情况下会始终如一地工作,还是我需要求助于 open (....O_EXCL) 来保证原子性?

【问题讨论】:

    标签: linux nfs file-locking


    【解决方案1】:

    您绝对不能指望flock() 与 NFS 一起工作。 fcntl()F_SETLK 有很大的工作机会,如果您在一个过程中有多种用途,请注意:http://0pointer.de/blog/projects/locking.html

    【讨论】:

      【解决方案2】:

      从历史上看,flock 至少已经存在了十年,并且从 2.0 开始由内核实现。来自flock man page

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-16
        • 2015-07-16
        • 2023-03-23
        • 1970-01-01
        • 2016-07-31
        • 1970-01-01
        相关资源
        最近更新 更多