Ruby:如何获取文件锁定以进行写入



我想要实现的是:

  1. 如果其他进程持有锁,请退出
  2. 否则获取用于写入的锁

我正在尝试修改的 Ruby 代码是。

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

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

有办法吗?谢谢。

新信息

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

创建一个锁定文件并改为锁定该文件。 如果你filename说"path/to/file.txt",那么在"path/to/file.txt.lock"上创建一个锁。 获得锁定文件的锁定后,请照常编辑真实文件。

相关内容

  • 没有找到相关文章

最新更新