Как получить время файла с точностью до наносекунды?
Я только что обнаружил, что stat()
вызов, и соответствующий struct stat
, не содержит полей для времени файла с точностью более одной секунды. Для установки этих времен есть множество {f,l}utime{n,}s()
функции, но не для получения.
Как тогда получить эти времена с точностью до наносекунды, предпочтительно используя POSIX API?
2 ответа
stat
структура возвращается stat()
Сам был обновлен для POSIX.1-2008.
struct stat
Структура содержит три времени модификации:
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.
Ранее эти три раза были time_t
значения с их разрешением в одну секунду.
Большинство файловых систем не имеют таких точных временных меток. Отсюда:
Большинство файловых систем, включая ext3, содержат данные метки времени с точностью до секунды. Ext4 расширяет точность этих данных до наносекунды. Некоторые источники также указывают, что временные отметки ext4 поддерживают даты до 25 апреля 2514 г. по сравнению с 18 января 2038 г. для ext3