Ruby:如何获取文件锁写入?

时间:2014-12-04 23:43:29

标签: ruby file filelock

我想要实现的目标是:

  1. 如果某个其他进程持有锁,则退出
  2. 否则获得写作锁
  3. 我想修改的Ruby代码是。

    File.open(filename, "wb") { |inf|
      if inf.flock(File::LOCK_EX|File::LOCK_NB) == 0
        ...
      end
    }
    

    我能找到的代码通常使用"rb"。如果我更改为"wb",则会出现问题:因为如果某个其他进程正在处理该文件(在尝试锁定之前我无法知道),该文件将被File.open(..., "wb")消灭。 / p>

    有办法吗?感谢。

    新信息

    我认为一种方法是使用"File::RDWR|File::CREAT",这样您就可以先打开文件了,它不会消除其内容,然后尝试锁定。不确定是否有其他方式,但"wb"可能无效。我想这是Ruby的尴尬:你必须在获取锁之前先打开文件。我认为这两个步骤应该是原子的。

1 个答案:

答案 0 :(得分:1)

创建一个锁定文件并将其锁定。如果您的filename说“path / to / file.txt”,则在“path / to / file.txt.lock”上创建一个锁。获得锁定文件锁定后,正常编辑真实文件。