5

Linuxシステムでエポック時間形式、精度ミリ秒でファイルの最終変更時間を取得する方法

統計を試しましたが、エポック時間を秒単位でしか表示できません。エポック時間をミリ秒単位で取得する簡単な方法はありますか

4

1 に答える 1

8

1 秒未満の精度をサポートするファイルシステムを使用している場合 (たとえば、ext4 ではサポートされていますが、ext3 ではサポートされていません)、 のst_atim.tv_nsec,st_ctim.tv_nsecおよびst_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;

1 秒は 1000 ミリ秒なので、それを掛けます。ミリ秒は 1000000ns なので、それで割ります。

ファイルシステムが秒未満の精度をサポートしていない場合、tv_nsecフィールドは常に 0 になります。これにより、同じコードが秒未満の精度をサポートしていないファイルシステムでも機能することが保証されます。

エポックからのミリ秒数は 32 ビット値に格納できないことに注意してください。少なくとも 64 ビットが必要です。uint64_tによって提供され<stdint.h>ます。または、 を使用することもできますunsigned long long

于 2012-11-14T16:42:26.593 に答える