C linux检查文件是否更新/更改/修改?

如果文件已被更新/更改,如何检查c,linux。

我想在打开文件并从中执行提取/ I / O操作之前检查文件以进行更新。

看看stat(2)的手册页 stat(2) 。 获取struct stat结构的st_mtime成员,它会告诉你文件的修改时间。 如果当前mtime比之前的mtime晚,则文件已被修改。

一个例子:

 int file_is_modified(const char *path, time_t oldMTime) { struct stat file_stat; int err = stat(path, &file_stat); if (err != 0) { perror(" [file_is_modified] stat"); exit(errno); } return file_stat.st_mtime > oldMTime; } 

这是一个inotify的介绍 ,如果这就是你要找的。

规范的方法是通过stat(2)检查文件的mtime。

你必须使用inotify。

stat()比这个用途更糟糕。 如果st_mtime与上次检查时不同,那么这会告诉你文件已经改变,一切正常。

但是,如果st_mtime是一样的呢? 不能保证这意味着文件在文件系统时间戳的粒度内没有改变。 例如,在ext3上,粒度趋向于几毫秒。 你不能依靠检查两者之间的时间差异,重要的是在最后一次检查过程之后文件可能被更改的速度有多快。

所以,即使st_mtime是一样的,你也不能确定文件没有改变。 因此,你必须假设它已经存在了,通过这个测试你没有必要欺骗自己。

同样的问题适用于st_ino,如果您希望在创建和替换操作中将文件(该名称)替换为新文件。 inode号码可以被重新使用,并且在几次替换之后,文件(通过名称)可以再次返回到其原始inode号码。

同样的问题适用于文件大小,甚至创建文件的散列。 所有允许你确定的是文件已经改变。 这些方法都不能让你完全相信它没有改变,甚至哈希(尽管这样做有信心)。

不要浪费你的时间stat(),这是一个傻瓜的差事。