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

wen*_*nzi 3 linux

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

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

Nik*_* C. 6

如果你在支持次秒级精度(例如EXT4支持它,Ext3并没有)文件系统,那么你可以通过获得纳秒的精度st_atim.tv_nsec,st_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;
Run Code Online (Sandbox Code Playgroud)

第二个有1000毫秒,所以你乘以它.一毫秒有1000000ns,所以你除以那个.

如果文件系统不支持亚秒级精度,则tv_nsec字段将始终为0.这可确保相同的代码也可用于不支持亚秒级精度的文件系统.

请注意,自纪元以来的毫秒数不能存储在32位值中.您至少需要64位.uint64_t由...提供<stdint.h>.或者,您可以使用unsigned long long.