我有一个在 Linux 操作系统上使用 C 将数据写入文件的进程。它使用 open()
/write()
函数,我一直想知道是否有另一个进程 rm
'd 或 mv
'文件。我的进程如何找到并重新创建文件?
最佳答案
您可以使用fstat()
获取有关打开文件的信息。如果 st_nlink
字段为零,则文件已从文件系统中删除(可能是通过移动到不同的文件系统,但您无法确定这一点)。您很有可能只剩下对该文件的引用 - 尽管可能还有其他进程也将其保持打开状态。直到最后一个打开文件描述符的进程最终关闭文件,磁盘空间才会被释放。
如果 st_nlink
字段仍然为正,那么您的文件在文件系统的某个地方仍然有一个名称。然后,您需要使用 stat()
来确定给定文件名的 st_dev
和 st_ino
字段是否与文件描述符中的相同字段相匹配.如果名称仍然存在并且具有相同的设备和 inode 编号,则它是“相同的”文件(尽管内容可能已更改)。如果有差异,则打开的文件与名称指定的文件不同。
请注意,如果您想确保给定名称不是指向文件移动副本的符号链接(symbolic link),那么您必须在打开文件时对文件使用 lstat()
它(以确保此时它不是符号链接(symbolic link)),并在您检查文件时再次检查(而不是使用 stat()
)。
关于c - 如何检查打开的文件是否已被另一个进程移动或删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785046/