<分区>
我正在尝试在 Linux 上获得接近于 Windows 提供的文件锁定语义,目的是在缓存文件由单独的进程打开时不删除它们。我的程序创建了各种我想在关闭时删除的临时缓存文件,但是多个实例可能同时运行并且我不想删除另一个实例正在使用的文件,因为它会破坏语义 - 缓存文件在不同点按名称打开,如果删除,将会中断。我知道 Linux 在关闭所有打开的句柄之前不会物理删除文件,但我仍然需要按名称打开它。
每个文件的名称唯一标识内容,即我知道如果我需要数据 X,它在名为 hash(X) 的缓存文件中,因此当前实例是否是创建它的实例并不重要,或者如果我正在重用另一个实例创建的文件。显然它不完全是数据的哈希,因为如果我有数据,我就不需要缓存文件,但足以说明重用缓存文件是我想要的。
我的问题是我还没有找到一种在打开文件后用 flock 锁定文件的无竞争方式。在这两个调用之间,另一个进程可能会完成并运行删除我刚刚创建的文件的缓存清理操作。我不需要像在 Windows 上那样强制锁定,因为只有我的程序访问这些文件,但我确实需要一种方法来防止实例相互踩踏。
编辑:我正在使用 C。