4

Ubuntu 12.04 LTS での次のコード:

 #include <stdio.h>
 #include <sys/timex.h>
 #include <sys/time.h>

 int main(int argc, char **argv) 
 {
     struct timeval tv; 
     gettimeofday(&tv, NULL);

     struct ntptimeval ntptv;
     ntp_gettime(&ntptv);

     printf("gettimeofday: tv_sec = %ld, tv_usec = %ld\n", 
                tv.tv_sec, tv.tv_usec);
     printf("ntp_gettime:  tv_sec = %ld, tv_usec = %ld\n", 
                ntptv.time.tv_sec, ntptv.time.tv_usec);
 }

戻り値:

 gettimeofday: tv_sec = 1366209548, tv_usec = 137736
 ntp_gettime:  tv_sec = 1366209548, tv_usec = 137743081

tv_usec値が実際にマイクロ秒のカウントである場合、値が 1000000 を超えてはならないため、これはちょっと奇妙です。上記の結果は、ntp_gettime()実際にナノ秒の精度を返していると思わせます。

http://manpages.ubuntu.com/manpages/precise/man2/ntp_gettime.2freebsd.htmlntp_gettime()マンページ (正確には) は、 あまり多くを語っていません。

以前のマンページ バージョン (hardy 用) http://manpages.ubuntu.com/manpages/hardy/man2/ntp_gettime.2.htmlSTA_NANOは、ビットがstatusによって返される単語に設定されているかどうかに応じて、ナノ秒またはマイクロ秒のいずれかであると主張していntp_adjtime()ます。

はっきりわかる人いますか?それ以外ではntp_gettime()ntp_adjtime()、 、およびそれらが呼び出すさまざまな内部関数はすべて、12.04 ソースで定義されていますか?

4

1 に答える 1