Как получить время файла с точностью до наносекунды?

Я только что обнаружил, что 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

Другие вопросы по тегам