如何获取具有纪元时间格式,精确毫秒的文件的最后修改时间

时间:2012-11-14 16:16:33

标签: linux

如何获取文件的最后修改时间 以纪元时间格式,  精密毫秒 在Linux系统上

我尝试过stat,但它只能以秒为单位显示纪元时间 有没有简单的方法来获得以毫秒为单位的纪元时间

1 个答案:

答案 0 :(得分:6)

如果您使用的是支持亚秒级精度的文件系统(例如ext4支持它,则ext3不支持),那么您可以通过st_atim.tv_nsecst_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_nsecuint64_t提供。或者,您可以使用<stdint.h>