为什么fstat不等于stat?

时间:2012-01-08 17:13:37

标签: macos

代码应该监视文件系统的变化,但是fstat产生的结果与stat不同,为什么?


struct stat info;
struct stat finfo;
char *path = "test";
int fd = open(path, O_EVTONLY);
if (fd <= 0){
    exit(-1);
}
wait_for_write(fd);
int err = fstat(fd, &finfo);
if (err){
    exit(-1);
}
err = stat(path, &info);
if (err){
    exit(-1);
}
if (finfo.st_mtimespec.tv_sec != info.st_mtimespec.tv_sec){
    //This happens!
    exit(-1);
}

finfo.st_mtimespec.tv_sec是与写入发生前的时间对应的值,info.st_mtimespec.tv_sec是与之后相对应的值

2 个答案:

答案 0 :(得分:1)

您不应该使用finfo.st_mtimespec.tv_sec,因为它是实施的内部;请改用finfo.st_mtime。 (这不是你的“问题”的答案,但它可能会避免将来出现相关问题)

答案 1 :(得分:0)

O_EVTONLY缓存连续查询的修改时间。