自从使用C在OS X中上次修改文件以来获取时间?

时间:2016-04-06 04:20:22

标签: c macos unix time posix

我有以下代码,用于打印自上次修改文件以来传递的时间:

int main(int argc, const char * argv[]) {

    struct stat fileInfo;
    char * dir = "/Users/jenna/Desktop/Random.rtf";
    stat(dir, &fileInfo);

    printf("Last modified time: %s\n", ctime(&fileInfo.st_mtime));

    time_t mytime;
    mytime = time(NULL);
    printf("Current time: %s\n", ctime(&mytime));

    double diff = difftime(ctime(&mytime), ctime(&fileInfo.st_mtime));
    printf("diff : %f\n", diff);

}

不幸的是,此代码提供了以下输出:

Last modified time: Wed Apr  6 00:15:30 2016

Current time: Wed Apr  6 00:17:29 2016

diff : 0.000000

当我将printf中的格式标志更改为%d时,我得到以下输出:

Last modified time: Wed Apr  6 00:15:30 2016

Current time: Wed Apr  6 00:18:34 2016

diff : 1983419808

两个输出都不正确,因为我预计只有几分钟的差异(用秒表示)。我在这做错了什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您应该参与启用编译器警告的做法。这段代码应该给你一些非常有帮助的。具体来说,您将char*值传递给difftime

由于ctime总是返回指向同一静态内存的指针,因此对ctime的两次调用将返回相同的指针。现在你隐式地将它们转换为time_t(编译器警告!!!),你得到零差异。

在第二种情况下,您将double传递给printf并告诉您传递了int,这是未定义的行为。

您实际想要的是将time_t值传递到difftime,如下所示:

double diff = difftime( mytime, fileInfo.st_mtime );
printf( "diff : %f\n", diff );

养成阅读不熟悉的功能文档的习惯:

相关问题