我想要实现的是:
- 如果其他进程持有锁,请退出
- 否则获取用于写入的锁
我正在尝试修改的 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"上创建一个锁。 获得锁定文件的锁定后,请照常编辑真实文件。