首页 文章

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

提问于
浏览
2

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

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

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

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


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

问题here没有这篇文章中要求的信息 . 请将此帖子取消标记为重复 .

1 回答

  • 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];
    };
    

相关问题