2014-06-11 24 views
0

的GNU date命令與返回納秒的能力爲數不多的實現方式之一:GNU`date`命令的納秒精度來自哪裏?

%N nanoseconds (000000000..999999999) 

例如,我們可以通過組合%s%N符號得到紀元以來的納秒數量。

$ date +%s%N 
1402513692992913666 

然後,到實際的問題。 GNU的date命令在哪裏得到如此精確的時間表示?

編輯:上面的「重複」問題實際上不是重複的。我在詢問GNU日期從(C調用?/ proc?)獲取時間信息,而不是計算機本身(硬件)的位置。

+0

請注意,精度和準確性是兩回事。 – SLaks

+0

@SLaks我不知道(或關心)是否正確。我只是想知道它從哪裏得到的所有這些數字。 – Soviero

+0

@Steven這不是一個重複。我在問GNU'date'是從哪裏獲得的(C調用?/ proc?),而不是計算機本身(硬件)的時間。 – Soviero

回答

0

使用來源,盧克!如果您在GNU日期的來源看,你會看到(在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; 
    } 

所以,這個問題的答案是clock_gettime(CLOCK_REALTIME)地方那是可用的,並且gettimeofday()否則(從微秒乘以了)。