我正在开发一个程序,我需要将文件修改的时间与当前时间进行比较。如果文件在一段时间内没有被修改,那么它被认为是“旧的”并且进程被终止。
然而,当我得到当前时间和修改时间时,他们没有返回可比较的结果。它们似乎以相同的格式返回,但两者之间的差异没有意义。我假设这与时区有关,或者也许我如何回归时代。尝试做一些搜索,但一直找不到任何解决我的问题的东西。
获取修改时间:
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
答案 0 :(得分:1)
这几乎肯定是存储在不同服务器上的文件。即使文件是从客户端计算机远程修改的,服务器也会使用服务器的时钟更新st_mtime字段。当客户端和服务器上的时钟不同时,这可能会导致修改时间明显不一致。
服务器或运行程序的主机时钟设置错误。
time()或stat返回的值应该与时区无关,因为它们应该是标准的linux Epoch(这是自1970年1月1日00:00:00以来的秒数 - 有一些小的警告)所以时区设置的差异不应该考虑到它。
当您在现在使用的目录中时,可以从运行程序的主机进行简单测试:
echo x > file; ls -l file; date
ls和date报告的时间应该非常接近。如果没有,则客户端或服务器上的时钟设置错误。