2012-07-07 168 views
8

我想在C.文件的最后修改日期几乎所有的来源,我发现沿着这个片段使用的东西:获取文件的最后修改日期用C

char *get_last_modified(char *file) { 
    struct tm *clock; 
    struct stat attr; 

    stat(file, &attr); 
    clock = gmtime(&(attr.st_mtime)); 

    return asctime(clock); 
} 

attr没有按” t甚至有一个字段st_mtime,只有st_mtimespec。然而,当使用这个我的Eclipse告诉我,passing argument 1 of 'gmtime' from incompatible pointer type就行clock = gmtime(&(attr.st_mtimespec));

我做错了什么?

PS:我开发的OSX雪豹,Eclipse CDT的使用GCC作为跨平台编译器

+0

是的,否则'stat'本身将不可用。 – 2012-07-07 08:55:20

+1

虽然OT:你不想把'get_last_modified()'返回的引用存储起来,不是吗? 'asctime()'返回一个静态内存的引用,它的内容在每次连续调用时都会被覆盖。 – alk 2012-07-07 09:14:02

+0

它只被调用一次,但我会记住应该永远改变:) – 2012-07-07 09:22:53

回答

5

在OS X上,st_mtimespec.tv_secst_mtime等同。

为了使这个随身携带,不要

#ifdef __APPLE__ 
#ifndef st_mtime 
#define st_mtime st_mtimespec.tv_sec 
#endif 
#endif 

,然后使用st_mtime

+0

有什么办法可以使这个交叉编译?该程序必须在Ubuntu上运行,没有任何警告和错误,但我没有虚拟机编程... – 2012-07-07 08:56:24

+0

请参阅编辑答案。 – mpartel 2012-07-07 09:02:28

+0

现在它告诉我'Field'tv_sec'无法解析' – 2012-07-07 09:08:02

相关问题