任何特定原因导致localtime使用struct tm *& stat *,在linux中?

时间:2012-07-26 19:48:12

标签: c linux time stat localtime

我有这个简单的代码(项目的一部分):

void displayFileProperties(struct stat* file,char*  outputProperties , char * path)
{

    struct tm* time;

        // code 
        // code
        time = localtime(&file->st_mtim);


        // code 

}

eclipse不断向我发出警告:

passing argument 1 of ‘localtime’ from incompatible pointer type [enabled by default]   main.c  /ex4    line 340    C/C++ Problem

知道怎么解决这个问题吗?谢谢

5 个答案:

答案 0 :(得分:1)

st_mtim是一个struct timespec(秒和纳秒)。你想要st_mtime

答案 1 :(得分:1)

完全改变答案:

SUGGESTIONS:

1)确保#include这些标题:

#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>

2)将指针投射到“const”

time = localtime((const time_t *)&file->st_mtime);

3)回发发生的事情

=============================================== ==

其他建议:

1)请阅读以下两个链接:

        

从内核2.5.48开始,stat结构支持纳秒分辨率   对于三个文件时间戳字段。 Glibc暴露纳秒   每个字段的组件使用st_atim.tv_nsec形式的名称,如果是   _BSD_SOURCE或_SVID_SOURCE功能测试宏已定义。这些字段在POSIX.1-2008中指定,从版本2.12开始,   如果定义了_POSIX_C_SOURCE,glibc也会公开这些字段名称   值为200809L或更大,或_XOPEN_SOURCE定义为   值700或更大。如果没有上述宏   定义,然后用表格的名称公开纳秒值   st_atimensec。在不支持亚秒的文件系统上   时间戳,纳秒字段返回值为0.

2)显然,makefile(“工作”)有一个Eclipse不能的#define,反之亦然。

可能是_POSIX_C_SOURCE和/或_XOPEN_SOURCE。

运行此命令以查看命令行(makefile?)环境中存在的内容:

gcc -dM -E - < /dev/null | less

3)请回复你找到的内容!

答案 2 :(得分:1)

你会想要使用它:

time = localtime(&file->st_mtime);

注意最后添加的'e'。 st_mtim是一个timespec,添加'e'是time_t(你需要的)。

答案 3 :(得分:0)

我在Eclipse中遇到了同样的问题: 字段st_mtime无法解析(语义错误)

通过右键单击项目修复Eclipse中的问题,选择Index-&gt;“Freshen All Files”

答案 4 :(得分:0)

#include <malloc.h>
#include <time.h>
#include <stdio.h>

static struct tm* alarmTime(void);

int main(){
    printf("Hour :%i\n", alarmTime()->tm_hour);
    printf("Minute :%i\n", alarmTime()->tm_min);
    return 0;
}

static struct tm* alarmTime(void){
    time_t now = time(NULL);
    struct tm* ptm;
#ifdef HAVE_LOCALTIME_R
    struct tm tmbuf;
    ptm = localtime_r(&now, &tmbuf);
#else
    ptm = localtime(&now);
#endif
    return ptm;
}