我在Linux OS上使用C进程将数据写入文件.它使用open()/ write()函数,我一直想知道另一个进程是rm'd还是mv'文件.我的流程如何找出并重新创建文件?
您可以使用fstat()获取有关打开文件的信息.如果该st_nlink字段为零,则该文件已从文件系统中删除(可能是通过移动到其他文件系统,但是没有真正的方法可以确定).有一个很好的机会你有唯一剩下的参考文件 - 虽然可能有其他进程也保持打开.在具有文件的打开文件描述符的最后一个进程最终关闭文件之前,磁盘空间不会被释放.
如果该st_nlink字段仍为正数,那么您的文件在文件系统中的某处仍有一个名称.然后,您需要使用它stat()来确定给定文件名的st_dev和st_ino字段是否与文件描述符中的相同字段匹配.如果名称仍然存在且具有相同的设备和inode编号,则它是"相同"文件(尽管内容可能已更改).如果存在差异,则打开的文件与name指定的文件不同.
请注意,如果要确保给定名称不是指向文件的移动副本的符号链接,那么lstat()在打开文件时必须使用该文件(以确保它在该点上不是符号链接) ),并再次检查文件(而不是使用stat()).