如何在Linux中使用文件流锁定文件?
像下面的示例一样,在Windows中完美地创建文件流,该文件被锁定,并且在释放该流之前,无法将其删除或写入其他会话中。在Linux下,我可以删除文件或在其他会话中将其写入而没有任何问题。
var f: TFileStream;
...
f := TFileStream.Create(TPath.Combine(FTemp, lowerCase(Name)), fmOpenReadWrite + fmCreate);
...
任何小费都非常感谢!
答案 0 :(得分:0)
最后,我找到了一个至少可以满足我的要求的可用解决方案:
在Windows中,我继续对fmShareExclusive使用简单方法。在Linux中,我按照上述问题中的说明应用了FileLock。为了检查排他锁,我通过popen运行命令行,并在删除锁文件然后创建/锁定之前捕获结果。
lsof -Fl <my flock file name>
如果存在锁,这将输出三行:
p7590
f14
lW
我在结果中寻找lW
,该结果指示文件上的排他锁,我可以根据需要对此做出反应。
如果进程崩溃,此解决方案仍然有效,因为文件锁也将消失。
我知道以下事实:这不是一个很好的解决方案,但似乎足够鲁棒和可靠。
欢迎提出意见和建议!