传递给 STAT 系统调用的结构的精确定义是什么?

What is the precise definition of the structure passed to the STAT system call?

我在哪里可以找到 STAT 系列系统调用所期望的结构的精确 定义

请注意,我指的是在汇编中调用的原始系统调用,(系统调用编号 45 和 x86_64 上的 6 ),而不是通常由 libc 提供的包装器。

手册页 stat(2) 以及我从 linux 和 glibc 源代码中挖掘出来的内容给出了令人困惑和矛盾的结果(不同的结构字段排序、额外字段、填充) .

我敢肯定我没有找到我应该去的地方,但我似乎找不到我要找的信息。这让我想到了 post 这个问题。


澄清:我寻求的是在任何给定体系结构上由系统调用返回的统计结构的确切定义。我知道我可以通过实验确定此信息。实验仅限于我的特定架构。此外,我希望在某处记录与 Linux 的 ABI 中使用的数据结构一样重要的内容。我想知道在哪里。

问题 here 没有此 post 中要求的信息。请取消将此 post 标记为重复项。

struct stat 定义严格取决于您的体系结构。例如。对于 x86_64,您可以在 arch/x86/include/uapi/asm/stat.h.

中找到它

在 user-space 中,您可以在 /usr/include/asm/stat.h 文件中找到相同的结构。

这里是 x86_64 的定义:

struct stat {
    __kernel_ulong_t    st_dev;
    __kernel_ulong_t    st_ino;
    __kernel_ulong_t    st_nlink;

    unsigned int        st_mode;
    unsigned int        st_uid;
    unsigned int        st_gid;
    unsigned int        __pad0;
    __kernel_ulong_t    st_rdev;
    __kernel_long_t     st_size;
    __kernel_long_t     st_blksize;
    __kernel_long_t     st_blocks;  /* Number 512-byte blocks allocated. */

    __kernel_ulong_t    st_atime;
    __kernel_ulong_t    st_atime_nsec;
    __kernel_ulong_t    st_mtime;
    __kernel_ulong_t    st_mtime_nsec;
    __kernel_ulong_t    st_ctime;
    __kernel_ulong_t    st_ctime_nsec;
    __kernel_long_t     __unused[3];
};