Доступ к значениям вспомогательной временной метки struct stat в переносимом режиме
stat
(2) руководство обращается к поддержке разрешения наносекунды для полей меток времени, но это не выглядит тривиальным, чтобы проверить их присутствие или их имена в программе, предназначенной для переноса: целых четыре имени макроса тестирования функции (_BSD_SOURCE
, _SVID_SOURCE
, _POSIX_C_SOURCE
, _XOPEN_SOURCE
) упоминаются. Похоже, что руководство предлагает следующее:
#if defined(_BSD_SOURCE) || defined(_SVID_SOURCE) || \
defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200809L || \
defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 700
// use st_atim.tv_nsec, etc.
#elif 1 // really?
// use st_atimensec, etc.
#else // when?
// no nanosecond field exists
#endif
- Там не упоминается ни о возможности
st_atim.tv_nsec
ниst_atimensec
совсем. Гарантируется ли одно из двух имен? - В нем говорится, что наносекундные поля возвращаются со значением 0, но это неотличимо от фактического значения 0. Как проверить, действительно ли поддерживаются метки времени в секунду?