所以我在C中实现mtime结构时遇到了麻烦,我试图检查文件的最后修改时间。编译时,我收到此错误:
pr8.1.c:246: error: incompatible types when assigning to type struct timespec from type time_t
make: *** [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
{ time_t st_mtime; };
P.S。抱歉格式,我不知道为什么格式是这样的。用Linux运行它。在此先感谢您的帮助。
答案 0 :(得分:0)
编译器告诉你类型是不兼容的,它们显然是。
答案 1 :(得分:0)
在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;
}