使用C,我如何知道何时创建文件?

时间:2011-04-10 21:44:51

标签: c file posix stat dirent.h

我正在用Linux编写一个程序,在一段时间内每隔x秒扫描一个目录进行修改,但是我很难找到创建文件或目录的时间。以下是我考虑的几个选项:

  • 使用stat结构,检查上次状态更改和数据修改时间戳是否相同。这就产生了一个问题,你可以创建一个文件,在程序有机会检查之前对其进行修改,这会改变数据修改时间戳,不再将其视为新文件。

  • 记录目录中每个文件/目录的名称并检查新文件/目录。这有一个问题,你删除一个文件,然后创建一个具有相同名称的新文件,它不会被解释为一个新文件。

  • 保留文件/目录数量。 Similliar对最后一个想法的问题。

话虽如此,有没有人知道如何唯一地识别文件/目录的创建?

3 个答案:

答案 0 :(得分:4)

你不能,至少不是这样。 POSIX没有规定将文件创建时间存储在文件系统中,如Windows和其他一些操作系统。它只保留状态更改,访问和修改时间。大多数Unix文件系统也不存储该信息。

其中一个原因是存在硬链接,因为文件时间戳存储在它们的inode中而不是存储在目录引用中。对于上午10点创建的文件,然后在上午11点硬链接到另一个目录,你会考虑创建时间是什么?如果复制文件怎么办?

您最好的,但不幸的是,特定于操作系统的方法是使用您的平台中可用的任何框架来监视文件系统事件,例如inotify on Linux和FreeBSD和MacOS X上的kqueue ......

编辑:

顺便说一句,Linux上的Ext4fs确实存储 inode 创建时间(crtime)。不幸的是,从用户空间获取该信息仍然至少有点awkward

答案 1 :(得分:1)

也许您应该使用inotify

答案 2 :(得分:1)

查看inotify(特定于Linux)。