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

时间:2015-03-25 07:24:50

标签: linux assembly system-calls stat

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

请注意,我指的是在程序集中调用的原始系统调用,(x86_64上的系统调用号456),而不是包装器通常由libc提供。

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

我确信我没有找到我应该去的地方,但我似乎无法找到我所追求的信息。这导致我发布这个问题。


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

问题here没有此帖中要求的信息。请将此帖子取消标记为副本。

1 个答案:

答案 0 :(得分:2)

struct stat定义严格取决于您的架构。例如。对于x86_64,您可以在arch/x86/include/uapi/asm/stat.h中找到它。

在用户空间中,您可以在/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];
};