GNU`date`命令的纳秒级精度来自哪里?

时间:2014-06-11 19:11:51

标签: gnu

GNU date命令是少数能够返回纳秒的实现之一:

%N   nanoseconds (000000000..999999999)

例如,我们可以通过组合%s%N符号来获取自纪元以来纳秒的数量。

$ date +%s%N
1402513692992913666

现在,到实际的问题。 GNU' date命令在哪里得到如此准确的时间表示?

编辑:"重复"上面的问题实际上并不重复。我问GNU日期从哪里得到它的时间信息(C调用?/ proc?),而不是计算机本身(硬件)。

1 个答案:

答案 0 :(得分:0)

Use The Source, Luke! If you look in the source of GNU date, you'll see (in lib/gettime.c):

if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME
  if (clock_gettime (CLOCK_REALTIME, ts) == 0)
    return;
# endif

  {
    struct timeval tv;
    gettimeofday (&tv, NULL);
    ts->tv_sec = tv.tv_sec;
    ts->tv_nsec = tv.tv_usec * 1000;
  }

So the answer to the question is clock_gettime(CLOCK_REALTIME) where that's available, and gettimeofday() otherwise (multiplying up from microseconds).