Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除c中可能锁定的文件_C_Linux_File_Locking_Delete File - Fatal编程技术网

删除c中可能锁定的文件

删除c中可能锁定的文件,c,linux,file,locking,delete-file,C,Linux,File,Locking,Delete File,我在linux上的C中使用fcntl锁,在尝试删除可能被其他进程锁定的文件时遇到了一个难题,这些进程也检查fcntl锁定机制。处理此必须删除的文件的首选方法是什么(我是否应该简单地删除该文件,而不考虑可能具有读卡器锁的其他进程,或者是否有更好的方法)? 任何帮助都将不胜感激。在UNIX系统上,可以在文件仍处于打开状态时取消链接;这样做会减少文件上的引用计数,但实际文件及其inode会一直保留,直到引用计数变为零。此外,UNIX系统上的锁定默认为建议性的,而不是强制性的,因此锁定文件不会阻止打开或

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

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

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

,即使您持有锁,也可以自由删除该文件

现在,请注意:您没有提到进程锁定此文件的原因,但您应该注意,如果您使用该文件进行进程间同步,删除它是将微妙的竞争条件引入系统的一种好方法,基本上是因为无法在单个操作中以原子方式创建和锁定文件

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