我刚刚发现stat()
调用和相应struct stat
的 不包含精度大于一秒的文件时间字段。对于设置这些时间,有多种{f,l}utime{n,}s()
功能,但不用于获取。
那么如何以纳秒精度获得这些时间,最好使用 POSIX API?
stat
自身返回的结构stat()
已针对 POSIX.1-2008 进行了升级。
该struct stat
结构包含三个修改时间:
struct timespec st_atim - Last data access timestamp.
struct timespec st_mtim - Last data modification timestamp.
struct timespec st_ctim - Last file status change timestamp.
(来自此处的 OpenGroup 链接Headers, <sys/stat.h>
),并且在此处struct timespec
(在 中)定义为<time.h>
至少包含:
time_t tv_sec - Seconds.
long tv_nsec - Nanoseconds.
以前,这三个时间是time_t
一秒分辨率的值。
大多数文件系统没有如此准确的时间戳。从这里:
大多数文件系统,包括 ext3,都包含精确到一秒的时间戳数据。Ext4 将此数据的精度扩展至纳秒。一些消息来源还表明 ext4 时间戳支持截至 2514 年 4 月 25 日的日期,而 ext3 支持的日期为 2038 年 1 月 18 日