据我所知,stat/fstat 系统调用只告诉我们 3 次有关文件的信息
当我在
stat filename
中运行 bash
命令时,我可以获得文件的 Birth
创建时间。我的问题是,如何通过某些系统调用在 gcc 中获取创建时间?
来自
man 2 statx
:
概要 #包括
#包括 #包括 #include /* AT_* 常量的定义 */ int statx(int dirfd, const char *pathname, int flags, unsigned int mask, struct statx *statxbuf);
描述 该函数返回有关文件的信息,并将其存储在 statxbuf 指向的缓冲区中。返回的缓冲区是一个结构体 的以下 低垂类型:
struct statx { __u32 stx_mask; /* Mask of bits indicating filled fields */ __u32 stx_blksize; /* Block size for filesystem I/O */ __u64 stx_attributes; /* Extra file attribute indicators */ __u32 stx_nlink; /* Number of hard links */ __u32 stx_uid; /* User ID of owner */ __u32 stx_gid; /* Group ID of owner */ __u16 stx_mode; /* File type and mode */ __u64 stx_ino; /* Inode number */ __u64 stx_size; /* Total size in bytes */ __u64 stx_blocks; /* Number of 512B blocks allocated */ __u64 stx_attributes_mask; /* Mask to show what's supported in stx_attributes */ /* The following fields are file timestamps */ struct statx_timestamp stx_atime; /* Last access */ struct statx_timestamp stx_btime; /* Creation */ struct statx_timestamp stx_ctime; /* Last status change */ struct statx_timestamp stx_mtime; /* Last modification */
这显示了一个创建文件标记的字段,适当地命名为
stx_btime
(我猜状态是延长的出生时间)。
请注意,对于 Darwin(可能还有任何 BSD),
stat()
已经包含一个字段 struct timespec st_birthtimespec
,并且没有 statx()
。