Ant*_*ony 12
看看手册页的stat(2).获取结构的st_mtime成员struct stat,它将告诉您文件的修改时间.如果当前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;
}
Run Code Online (Sandbox Code Playgroud)
这是一个介绍inotify,如果这是你正在寻找的.
你必须使用inotify.
为此目的,stat()比无用更糟糕.如果st_mtime与您上次检查它的时间不同,则会告诉您文件已更改,一切正常.
但是如果st_mtime是相同的呢?无法保证这意味着文件未在文件系统时间戳的粒度内更改.例如,在ext3上,粒度往往是几毫秒.您不能依赖于检查之间的时间差,重要的是在您的流程最后一次检查后文件可能被更改的速度.
因此,即使st_mtime相同,也无法确定文件是否未更改.因此,您必须假设它具有,并且没有必要通过测试来欺骗自己.
如果您希望在创建和替换操作中将文件(该名称)替换为新文件,则相同的问题也适用于st_ino.可以重复使用inode编号,并且在几次替换之后,文件(按名称)可以再次返回其原始inode编号.
同样的问题适用于文件大小,甚至创建文件的哈希值.所有允许您确定的是文件已更改.这些方法都没有让你完全相信它没有改变,甚至是散列(虽然它接近信心).
不要浪费你的时间与stat(),这是一个傻瓜的差事.
| 归档时间: |
|
| 查看次数: |
13357 次 |
| 最近记录: |