我在linux上使用 C 中的fcntl锁,并且在尝试删除可能被其他进程检查fcntl锁定机制的文件时可能会被锁定的困境。处理这个必须删除的文件的首选方法是什么(我应该简单地删除文件而不考虑可能有读取器锁定的其他进程或者有更好的方法)? 任何帮助将不胜感激。
答案 0 :(得分:2)
在UNIX系统上,可以在文件仍处于打开状态时取消链接;这样做会减少文件的引用计数,但实际文件及其inode保持不变,直到引用计数变为零。
答案 1 :(得分:1)
正如其他人所说,即使你持有锁,你也可以自由删除文件。
现在,注意事项:您没有提到进程锁定此文件的原因,但您应该知道,如果您使用该文件进行进程间同步,删除它是将细微的竞争条件引入您的过程的好方法系统,主要是因为没有办法在一次操作中自动创建和锁定文件。
例如,进程AA可能会创建该文件,目的是立即将其锁定以执行其需要执行的任何更新。但是,没有什么可以阻止进程BB首先抓取文件上的锁,然后删除文件,让进程AA具有现在删除的文件的句柄。进程AA仍然可以锁定和更新该文件,但这些更新实际上会“丢失”,因为该文件已被删除。
答案 2 :(得分:0)
此外,UNIX系统上的锁是默认的,而不是强制性的,因此锁定文件不会阻止它被打开或取消链接,只是再次被锁定。