因此,我在C中实现mtime struct时遇到了麻烦,在这里尝试检查文件的最后修改时间。编译时,我收到此错误:
pr8.1.c:246: error: incompatible types when assigning to type struct timespec from type time_tmake: *** [pr8] Error 1
我为此使用的代码如下:

static struct timespec mtime(const char *file)
{
    struct stat s;
    struct timespec t = { 0, 0 };

    if (stat(file, &s) == 0)
#if     defined(MTIME) && MTIME == 1    // Linux
    { t = s.st_mtime; }
#elif   defined(MTIME) && MTIME == 2    // Mac OS X
    { t = s.st_mtimespec; }
#elif   defined(MTIME) && MTIME == 3    // Mac OS X, with some additional settings
    { t.tv_sec = s.st_mtime; t.tv_nsec = s.st_mtimensec; }
#else                                   // Solaris
    { t.tv_sec = s.st_mtime; }
#endif

    return t;
}

和struct stat:
struct stat
{ time_t        st_mtime; };

附言对格式感到抱歉,我不确定为什么格式会像这样。在Linux上运行它。先谢谢您的帮助。

最佳答案

在linux和第一个mac os x版本中,您是从int(time_t)分配给该结构的。在其他两个版本中,您正在正确地将s的成员分配给t的成员。如果更改为此,您是否可以正确操作?

static struct timespec mtime(const char *file)
{
    struct stat s;
    struct timespec t = { 0, 0 };

    if (stat(file, &s) == 0)
#if     defined(MTIME) && MTIME == 1    // Linux
    { t.tv_sec = s.st_mtime; }
//     ^^^^^^^
#elif   defined(MTIME) && MTIME == 2    // Mac OS X
    { t.tv_sec = s.st_mtimespec; }
//     ^^^^^^^
#elif   defined(MTIME) && MTIME == 3    // Mac OS X, with some additional settings
    { t.tv_sec = s.st_mtime; t.tv_nsec = s.st_mtimensec; }
#else                                   // Solaris
    { t.tv_sec = s.st_mtime; }
#endif

    return t;
}

关于c - 使用time_t来检查C中的上次修改时间很麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10325348/

10-10 12:28