stat()
呼び出しとそれに対応するstruct stat
に、1秒を超える精度のファイル時間のフィールドが含まれていないことを発見しました。これらの時間を設定するために、さまざまな{f,l}utime{n,}s()
機能がありますが、取得するためのものではありません。
では、できればPOSIX APIを使用して、これらの時間をナノ秒の精度でどのように取得するのでしょうか。
stat
返される構造は、stat()
POSIX.1-2008用にアップグレードされています。
このstruct stat
構造には、次の3つの変更時間が含まれています。
struct timespec st_atim - Last data access timestamp.
struct timespec st_mtim - Last data modification timestamp.
struct timespec st_ctim - Last file status change timestamp.
(このOpenGroupリンクHeaders, <sys/stat.h>
から)そしてそれstruct timespec
はそこに(で<time.h>
)少なくとも以下を含むものとして定義されています:
time_t tv_sec - Seconds.
long tv_nsec - Nanoseconds.
以前は、これらの3回はtime_t
、1秒の解像度の値でした。
ほとんどのファイルシステムは、そのような正確なタイムスタンプを保持していません。ここから:
ext3を含むほとんどのファイルシステムには、1秒まで正確なタイムスタンプデータが含まれています。Ext4は、このデータの精度をナノ秒に拡張します。一部の情報源は、ext4タイムスタンプがext3の2038年1月18日に対して、2514年4月25日までの日付をサポートすることも示しています。