3

我正在为 linux 编写一个 C 程序,该程序在一段时间内每 x 秒扫描一次目录以进行修改,但是我无法找出文件或目录的创建时间。以下是我考虑的几个选项:

  • 使用 stat 结构,检查最后状态更改和数据修改时间戳是否相同。这带来了一个问题,您可以创建一个文件,在程序有机会检查它之前对其进行修改,这会更改数据修改时间戳并且不再将其视为新文件。

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

  • 记录文件/目录的数量。与上一个想法类似的问题。

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

4

3 回答 3

4

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

造成这种情况的原因之一是硬链接的存在,因为文件时间戳存储在它们的 inode 中,而不是目录引用中。对于在上午 10 点创建然后在上午 11 点硬链接到另一个目录的文件,您认为创建时间是多少?如果复制文件怎么办?

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

编辑:

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

于 2011-04-10T21:49:15.490 回答
1

也许您应该使用inotify

于 2011-04-10T21:48:55.170 回答
1

签出inotify(Linux 特定)。

于 2011-04-10T21:49:18.540 回答