c - 使用 C 在 OS X 中上次修改文件后获取时间?

标签 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

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

最佳答案

您应该练习启用编译器警告。这段代码应该会给你一些非常有用的代码。具体来说,您将 char* 值传递给 difftime

因为 ctime 总是返回一个指向同一个静态内存的指针,所以对 ctime 的两次调用返回同一个指针。现在您隐式地将它们转换为 time_t(编译器警告!!!),并且您得到的差值为零。

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

实际上想要的是像这样将time_t 值传递给difftime:

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

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

关于c - 使用 C 在 OS X 中上次修改文件后获取时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36441424/

相关文章:

c - 理解传递的这个参数

在不使用字段数的情况下检查 scanf(..) 是否成功——有办法吗?

macos - cocoa : Hide any window using accessibility

macos - 有没有办法确定哪些 unicode 字符集与给定的语言代码相关联?

c++ - 确定 c/c++ 代码中内存泄漏的工具

linux - 符号链接(symbolic link) - 性能受到影响?

在 Visual Studio 2012 Express 中将 C 代码编译为 .bin 文件

循环链表显示 pthread 的奇怪行为

macos - Git 说我的一些图像文件未被跟踪(它们不是)

c - 如何检查 libxml2 是否已初始化