Niektóre systemy plików (np. Ext4 i JFS) oferują nanosekundową rozdzielczość pól atime/mtime. Jak mogę odczytać pola o rozdzielczości ns? stat
syscall zwraca time_t
, która jest drugą rozdzielczością.Uzyskaj precyzyjne pola atime, mtime, ctime dla pliku (stat?)
Odpowiedz
czasów sekund rozdzielczości są w polach:
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 */
Ale sekcja „UWAGI” człowieka http://www.kernel.org/doc/man-pages/online/pages/man2/stat.2.html mówi:
Ponieważ jądro 2.5.48, struktura stat obsługuje rozdzielczość nanosekund dla trzech pól znaczników pliku. Glibc odsłania nanosekundowy komponent każdego pola używając nazw postaci st_atim.tv_nsec, jeśli zdefiniowano makro testowe funkcji _BSD_SOURCE lub _SVID_SOURCE. Pola te są określone w POSIX.1-2008, a począwszy od wersji 2.12 glibc również ujawnia te nazwy , jeśli _POSIX_C_SOURCE jest zdefiniowane z wartością 200809L lub większą, lub _XOPEN_SOURCE jest zdefiniowane z wartością 700 lub większą. Jeśli żadna z wymienionych makra są zdefiniowane, wówczas wartości nanosekundy narażone są z imion st_atimensec formularza.
Więc NSEC części czasach są w tej samej "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
Więc jeśli chcę mój program być przenośne, który powinienem użyć: 'st_atim.tv_nsec' lub' st_atimensec'? – musiphil
Jak aby był on zgodny ze specyficznych implementacji * NetBSD i OSX (które wspierają nanosekundy ale z różnymi nazwami typów reklam) *? – user2284570