gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:51:46 25 4
gpt4 key购买 nike

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

但是,当我获得当前时间和修改时间时,它们不会返回可比较的结果。它们似乎以相同的格式返回,但两者之间的区别没有意义。我假设这与时区有关,或者可能与我返回时间的方式有关。尝试进行一些搜索,但未能找到任何解决我的问题的方法。

获取修改时间:

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);
}
}

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

Current time: 1433371851
Modified time: 1433374890

最佳答案

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

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

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

您可以在运行程序的主机上做一个简单的测试,同时您在您现在使用的同一目录中:

 echo x > file; ls -l file;  date

ls 和 date 报告的时间应该非常一致。如果不是,则客户端或服务器上的时钟设置错误。

关于c - 文件修改时间结果与当前时间不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30632750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com