调用clock_gettime()时,返回的tv_nsec字段实际上可能超过一秒?

yve*_*mes 8 c linux glibc libc

当您调用clock_gettime()它时,返回timespec结构.

struct timespec {
    time_t tv_sec; /* seconds */
    long tv_nsec; /* nanoseconds */
};
Run Code Online (Sandbox Code Playgroud)

我没有在手册页中找到tv_nsec不会超过一秒的保证.实际存在保证吗?它可能依赖于linux的库(glibc?)实现吗?

关键的想法是:我是否需要"规范化"来自clock_gettime()函数的任何结果?

use*_*028 6

根据opengroup

tv_nsec成员仅在大于或等于零时有效,并且小于一秒(1000万)内的纳秒数.该结构描述的时间间隔是(tv_sec*10' - .4m'9'4m'+ tv_nsec)纳秒.

所以根据opengroup的说法,看起来它必须不到1秒.