fstat:st_atime和st_mtime不是会员?

时间:2016-02-26 07:30:20

标签: c

我正在对我的文件描述符执行.navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:focus, .navbar-inverse .navbar-nav>.open>a:hover { background-color: transparent; } 并将其转储到fstat。我阅读了struct stat的文档(下面的链接),并声称有成员fstatst_atime

http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/stat.h.html

GCC让我编译,但是通过GDB,我无法打印出那些成员(即我可以打印其他所有成员)。 GDB声称它们不存在。

事实上,当我打印出st_mtime时,struct stat拼写为st_atime(即与st_atim相同)。然后它看起来像是元组或其他东西,因为它包含两个值,st_mtimetv_sec

有谁知道为什么tv_nsec声称他们不存在?

此外,是否有人知道如何将其传递给GDB?我正在使用memcpy

这是它抱怨的代码行,说我不能在这里传递C90。如何投射它以使这条线工作?

time_t

MY OS:CentOS

1 个答案:

答案 0 :(得分:1)

在Linux上,st_atime中的至少某些版本struct stat和其他一些时间字段位于struct timespec内,并包含具有完整纳秒精度的正确时间戳。在这些系统上st_atime是对其他系统的定义。在我的CentOS机器上,它被定义为st_atim.tv_sec

将代码丢入预处理器以查看系统中的代码:

$ cat foo.c
#include <sys/stat.h>

void
foo(void)
{
    struct stat st;

    (void)st.st_atime;
}
$ cc -E foo.c | tail -7
void
foo(void)
{
 struct stat st;

 (void)st.st_atim.tv_sec;
}

Gdb不了解预处理器定义,因此无法知道代码是如何预处理的。它只知道结构的真正定义。