在哪里可以找到STAT
系统调用家族所期望的结构的精确定义?
请注意,我指的是在程序集中调用的原始系统调用(x86_64上的系统调用编号为4
、5
和6
),而不是通常由libc提供的包装器。
手册页stat(2)
,以及我可以从linux和glibc源代码中挖掘出的内容,给出了令人困惑和矛盾的结果(不同结构的字段排序、额外字段、填充)。
我确信我没有找到该找的地方是我的错,但我似乎找不到我想要的信息。这让我提出了这个问题。
澄清:我所寻求的是任何给定体系结构上系统调用返回的stat结构的确切定义。我知道我可以通过实验来确定这些信息。实验仅限于我的特定架构。此外,我希望像Linux的ABI中使用的数据结构这样重要的东西能够在某个地方被记录下来。我想知道在哪里。
这里的问题没有这篇文章中要求的信息。请取消此帖子的重复标记。
struct stat
的定义严格取决于您的体系结构。例如,对于x86_64,您可以在arch/x6/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];
};