Получить поля atime, mtime, ctime с точностью до наносекунды для файла (статистика?)

Некоторые файловые системы (например, ext4 и JFS) предлагают наносекундное разрешение полей atime/mtime. Как я могу прочитать поля ns-разрешения? stat системный вызов возвращает time_t, что второе разрешение.


person osgx    schedule 26.08.2011    source источник


Ответы (1)


Времена второго разрешения находятся в полях:

           time_t    st_atime;   /* time of last access */
           time_t    st_mtime;   /* time of last modification */
           time_t    st_ctime;   /* time of last status change */

Но раздел «ПРИМЕЧАНИЯ» на странице man http://www.kernel.org/doc/man-pages/online/pages/man2/stat.2.html говорит:

Начиная с ядра 2.5.48, структура статистики поддерживает разрешение в наносекундах для трех полей отметки времени файла. Glibc предоставляет наносекундный компонент каждого поля, используя имена в форме st_atim.tv_nsec, если определен макрос тестирования функций _BSD_SOURCE или _SVID_SOURCE. Эти поля указаны в POSIX.1-2008, и, начиная с версии 2.12, glibc также предоставляет имена этих полей, если _POSIX_C_SOURCE определен со значением 200809L или выше, или _XOPEN_SOURCE определен со значением 700 или выше. Если ни один из вышеупомянутых макросов не определен, то значения наносекунд отображаются с именами в форме st_atimensec.

Итак, части времени nsec находятся в одной и той же "struct stat": ( /usr/include/asm/stat.h )

 unsigned long st_atime_nsec;

 unsigned int st_mtime_nsec;

 unsigned long st_ctime_nsec;

 #define STAT_HAVE_NSEC 1
person osgx    schedule 26.08.2011
comment
Итак, если я хочу, чтобы моя программа была переносимой, какую из них мне следует использовать: st_atim.tv_nsec или st_atimensec? - person musiphil; 06.11.2013
comment
Как сделать его совместимым со специфическими реализациями NetBSD и OSX (которые поддерживают наносекунды, но с другими типами имен объявлений)? - person user2284570; 29.05.2015