如何获取文件的上次修改时间纪元时间格式, 精确毫秒在 Linux 系统上
我尝试了统计,但它只能以秒为单位显示纪元时间有没有简单的方法可以在毫秒内获取纪元时间
如果你在一个支持亚秒级精度的文件系统上(例如ext4支持它,ext3不支持),那么你可以通过struct stat
的st_atim.tv_nsec
、st_ctim.tv_nsec
和st_mtim.tv_nsec
字段获得纳秒级精度。这些值表示纳秒数以及st_atime
和朋友中的秒数。例如,您可以使用以下方法获取毫秒时间戳:
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;
一秒钟有 1000 毫秒,所以你乘以它。一毫秒有 1000000ns,所以你除以它。
如果文件系统不支持亚秒级精度,则tv_nsec
字段将始终为 0。这可确保相同的代码也适用于不支持亚秒级精度的文件系统。
请注意,自纪元以来的毫秒数不能存储在 32 位值中。您至少需要 64 位。 uint64_t
由<stdint.h>
提供。或者,您可以使用 unsigned long long
.