以可移植的方式访问struct stat的亚秒时间戳值

时间:2013-11-06 00:58:21

标签: linux posix glibc stat time-precision

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
  1. 它没有提及任何时候都没有st_atim.tv_nsecst_atimensec的可能性。是否保证存在两个名称之一?
  2. 它表示纳秒字段的返回值为0,但这与实际值0无法区分。如何测试是否确实支持亚秒时间戳?

0 个答案:

没有答案