我想要实现的是:
- 如果其他进程持有锁,则退出
- 否则获取写入锁
我尝试修改的 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 的一个尴尬之处:在获取锁之前必须先打开文件。我认为这两个步骤应该是原子的。
最佳答案
创建一个锁定文件并锁定它。如果您的文件名
是“path/to/file.txt”,则在“path/to/file.txt.lock”上创建一个锁。一旦您获得了对锁定文件的锁定,就可以像平常一样编辑真实文件。
关于Ruby:如何获取文件锁以进行写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27306323/