linux/gcc 中的文件创建时间系统调用

问题描述 投票:0回答:1

据我所知,stat/fstat 系统调用只告诉我们 3 次有关文件的信息

  • 上次访问时间(st_atim 字段)
  • 上次修改时间(st_mtim 字段)
  • 最后一次状态改变的时间(st_ctim)

当我在

stat filename
中运行
bash
命令时,我可以获得文件的
Birth
创建时间。我的问题是,如何通过某些系统调用在 gcc 中获取创建时间?

linux libc stat fstat
1个回答
0
投票

来自

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()

© www.soinside.com 2019 - 2024. All rights reserved.