gpt4 book ai didi

c - 无法使用 time_t 检查 C 中的最后修改时间

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:39:03 24 4
gpt4 key购买 nike

所以我在 C 中实现 mtime 结构时遇到了问题,我试图在其中检查文件的最后修改时间。编译时,我收到此错误:

pr8.1.c:246:错误:从类型 time_t 分配给类型 struct timespec 时类型不兼容
make: *** [pr8] 错误 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; };

附言对格式感到抱歉,我不确定为什么格式会这样。使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com