Delphi 10.3 Linux专有文件访问

时间:2019-12-26 18:35:27

标签: linux file delphi locking

如何在Linux中使用文件流锁定文件?

像下面的示例一样,在Windows中完美地创建文件流,该文件被锁定,并且在释放该流之前,无法将其删除或写入其他会话中。在Linux下,我可以删除文件或在其他会话中将其写入而没有任何问题。

var f: TFileStream;
...
f := TFileStream.Create(TPath.Combine(FTemp, lowerCase(Name)), fmOpenReadWrite + fmCreate);
...

任何小费都非常感谢!

1 个答案:

答案 0 :(得分:0)

最后,我找到了一个至少可以满足我的要求的可用解决方案:

在Windows中,我继续对fmShareExclusive使用简单方法。在Linux中,我按照上述问题中的说明应用了FileLock。为了检查排他锁,我通过popen运行命令行,并在删除锁文件然后创建/锁定之前捕获结果。

lsof -Fl <my flock file name>

如果存在锁,这将输出三行:

p7590
f14
lW

我在结果中寻找lW,该结果指示文件上的排他锁,我可以根据需要对此做出反应。

如果进程崩溃,此解决方案仍然有效,因为文件锁也将消失。

我知道以下事实:这不是一个很好的解决方案,但似乎足够鲁棒和可靠。

欢迎提出意见和建议!