文件修改时间结果与当前时间不匹配

时间:2015-06-03 23:51:01

标签: c linux

我正在开发一个程序,我需要将文件修改的时间与当前时间进行比较。如果文件在一段时间内没有被修改,那么它被认为是“旧的”并且进程被终止。

然而,当我得到当前时间和修改时间时,他们没有返回可比较的结果。它们似乎以相同的格式返回,但两者之间的差异没有意义。我假设这与时区有关,或者也许我如何回归时代。尝试做一些搜索,但一直找不到任何解决我的问题的东西。

获取修改时间:

time_t getMod(const char *file){
    struct stat attrib;
    if (stat(file, &attrib) == -1) {
        perror(file);
        exit(1);
    }
    return attrib.st_mtime;
}

获取当前时间并进行比较:

while(loop == 1){
    printf ("Sleeping..\n");
    sleep(numSleep); //Sleep
    printf ("Awake..\n");

    curTime = time(0); //Current time
    modTime = getMod(argv[fileIndex]); //Modified time

    printf ("Current time: %d\n", curTime);
    printf ("Modified time: %d\n", modTime);

    seconds = curTime - modTime;
    printf ("Seconds: %d\n", seconds);
    if(seconds > numSleep){
        kill(pid, SIGKILL); 
    }
}

我在睡眠时修改文件时得到的输出示例:

Current time: 1433371851
Modified time: 1433374890

1 个答案:

答案 0 :(得分:1)

这几乎肯定是存储在不同服务器上的文件。即使文件是从客户端计算机远程修改的,服务器也会使用服务器的时钟更新st_mtime字段。当客户端和服务器上的时钟不同时,这可能会导致修改时间明显不一致。

服务器或运行程序的主机时钟设置错误。

time()或stat返回的值应该与时区无关,因为它们应该是标准的linux Epoch(这是自1970年1月1日00:00:00以来的秒数 - 有一些小的警告)所以时区设置的差异不应该考虑到它。

当您在现在使用的目录中时,可以从运行程序的主机进行简单测试:

 echo x > file; ls -l file;  date

ls和date报告的时间应该非常接近。如果没有,则客户端或服务器上的时钟设置错误。