我在Linux中遇到了一个麻烦,当我试图获得ns时间时,这是在kernal 2.6.18:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
struct timespec time_start;
clock_gettime(CLOCK_REALTIME, &time_start);
printf(CLOCK_REALTIME);
printf("\nstart time %llus,%llu ns\n", time_start.tv_sec,time_start.tv_nsec);
return 0;
}
但是当我运行这个脚本时,它打印如下:
[root@master test]# ./time
start time 1474529199s,506211000 ns
[root@master test]# ./time
start time 1474529200s,65344000 ns
[root@master test]# ./time
start time 1474529200s,557196000 ns
此处只能获得μs,ns为0
有人可以告诉我为什么会这样吗?
答案 0 :(得分:1)
您获得的操作系统精度与操作系统一样多。在这种情况下,操作系统似乎只提供微秒级的分辨率,因此您无能为力。
这并不罕见,因为你要求自1970年以来的几秒钟的确切时间。您可以检查clock()或寻找可能提供更高分辨率的OS依赖功能。 (时钟通常在计算机启动后计算)。
它不是核心,而是内核。喜欢“核心”。拼写这样的技术术语是错误的形式,因为这里的许多人都是非母语人士并且可能认为它是正确的并且错误传播。