5

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

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

4

1 回答 1

8

如果您使用的文件系统支持亚秒级精度(例如 ext4 支持,ext3 不支持),那么您可以通过st_atim.tv_nsecst_ctim.tv_nsecst_mtim.tv_nsec的字段获得纳秒级精度struct stat。这些值表示除了秒数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.

于 2012-11-14T16:42:26.593 回答