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