2

我在 linux 上的C中使用 fcntl 锁,并且在尝试删除可能被其他进程锁定的文件时遇到了两难境地,这些进程也检查 fcntl 锁定机制。处理这个必须删除的文件的首选方法是什么(我应该简单地删除文件而不考虑其他可能有读卡器锁的进程还是有更好的方法)?任何帮助将非常感激。

4

3 回答 3

3

在 UNIX 系统上,可以在文件仍处于打开状态时取消链接;这样做会减少文件上的引用计数,但实际文件及其 inode 仍然存在,直到引用计数变为零。

于 2010-05-05T16:06:34.047 回答
1

正如其他人所指出的,即使您持有锁,您也可以自由删除文件。

现在,一个警告:你没有提到为什么进程锁定这个文件,但你应该知道,如果你使用那个文件进行进程间同步,删除它是一个很好的方法,可以在你的系统中引入微妙的竞争条件,基本上因为没有办法在单个操作中自动创建和锁定文件。

例如,进程 AA 可能会创建文件,目的是立即锁定它以执行它需要执行的任何更新。但是,没有什么可以阻止进程 BB 先获取文件上的锁,然后删除文件,让进程 AA 拥有指向现在已删除文件的句柄。进程 AA 仍将能够锁定和更新该文件,但这些更新实际上将“丢失”,因为该文件已被删除。

于 2010-05-05T17:35:48.177 回答
0

此外,UNIX 系统上的锁默认是建议性的,不是强制性的,因此锁定文件不会阻止它被打开或取消链接,只是防止再次被锁定。

于 2010-05-05T16:33:47.293 回答