如何获取文件的最后修改时间 以纪元时间格式, 精密毫秒 在Linux系统上
我尝试过stat,但它只能以秒为单位显示纪元时间 有没有简单的方法来获得以毫秒为单位的纪元时间
答案 0 :(得分:6)
如果您使用的是支持亚秒级精度的文件系统(例如ext4支持它,则ext3不支持),那么您可以通过st_atim.tv_nsec
,st_ctim.tv_nsec
和{{获得纳秒精度1}} st_mtim.tv_nsec
的字段。除了struct stat
和朋友中的秒数之外,这些值还表示纳秒数。例如,您可以使用以下内容获取毫秒时间戳:
st_atime
第二个有1000毫秒,所以你乘以它。毫秒有1000000ns,所以除以它。
如果文件系统不支持亚秒级精度,则struct stat info;
stat("/etc", &info);
uint64_t access_ms = info.st_atime * 1000 + info.st_atim.tv_nsec / 1000000;
uint64_t status_ms = info.st_ctime * 1000 + info.st_ctim.tv_nsec / 1000000;
uint64_t modification_ms = info.st_mtime * 1000 + info.st_mtim.tv_nsec / 1000000;
字段将始终为0.这可确保相同的代码也可用于不支持亚秒级精度的文件系统。
请注意,自epoch以来的毫秒数无法存储在32位值中。您至少需要64位。 tv_nsec
由uint64_t
提供。或者,您可以使用<stdint.h>
。