The stat
(2) manual解决了对时间戳字段的纳秒分辨率的支持,但在一个旨在可移植的程序中测试它们的存在或它们的名称并不简单:多达四个特征测试宏名称(提到了_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
的可能性。是否保证存在两个名称之一?