我想要实现的目标是:
我想修改的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的尴尬:你必须在获取锁之前先打开文件。我认为这两个步骤应该是原子的。
答案 0 :(得分:1)
创建一个锁定文件并将其锁定。如果您的filename
说“path / to / file.txt”,则在“path / to / file.txt.lock”上创建一个锁。获得锁定文件锁定后,正常编辑真实文件。