Доступ к значениям вспомогательной временной метки 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
  1. Там не упоминается ни о возможности st_atim.tv_nsec ни st_atimensec совсем. Гарантируется ли одно из двух имен?
  2. В нем говорится, что наносекундные поля возвращаются со значением 0, но это неотличимо от фактического значения 0. Как проверить, действительно ли поддерживаются метки времени в секунду?

0 ответов

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