我在linux上使用C中的fcntl锁,并且在尝试删除可能从检查fcntl锁定机制的其他进程中锁定的文件时陷入两难境地。处理这个文件的首选方法是什么,必须删除(我应该直接删除该文件,而不考虑可能有读取器锁的其他进程,还是有更好的方法)?任何帮助都将不胜感激。
发布于 2010-05-05 16:06:34
在UNIX系统上,可以在文件仍处于打开状态时解除它的链接;这样做可以减少文件上的引用计数,但是实际文件及其inode仍然存在,直到引用计数变为零为止。
发布于 2010-05-05 17:35:48
正如其他人所指出的,即使您持有锁,也可以删除该文件。
现在,请注意:您没有提到进程为什么要锁定这个文件,但是您应该知道,如果您使用该文件进行进程间同步,那么删除它是将微妙的竞争条件引入您的系统的一个好方法,这基本上是因为无法在单个操作中原子地创建和锁定文件。
例如,process可能会创建文件,目的是立即锁定它以执行它需要做的任何更新。但是,没有什么可以阻止进程BB首先抓取文件上的锁,然后删除文件,给进程AA留下一个句柄到现在删除的文件。Process仍然能够锁定和更新该文件,但是这些更新实际上将被“丢失”,因为该文件已经被删除。
发布于 2010-05-05 16:33:47
此外,UNIX系统上的锁在默认情况下是建议性的,而不是强制性的,因此锁定文件不会阻止文件打开或断开链接,只会再次锁定。
https://stackoverflow.com/questions/2774764
复制相似问题