[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:41001] Re: hwclockのseconds表示について



武藤@Debianぷろじぇくとです。

At Mon, 12 Jul 2004 18:11:17 +0900,
ichikawa wrote:
> 大したことでは無いのですが、調べても見つからなかったので
> 質問させてください。
> 
> hwclockコマンドで内臓時計の値を表示させると次のようになります。
> 
> ~$ sudo hwclock --show
> 2004年07月12日 17時44分18秒  -0.343922 seconds
> 
> この、「 -0.343922 seconds 」とは、何を表しているのでしょうか?
> 
> 「man hwclock」も見ましたが、特に説明が見つかりませんでした。
> (見かたが、悪いのかな??)

そんなときにはソースを見るのがいいですね。
#「Code Reading」(毎日コミュニケーションズ、ISBN4839912653)もよろしく :-)

hwclockはutil-linuxパッケージなので、apt-get source util-linuxでソース
を展開。

hwclock/hwclock.cが該当のソースです。調べ方はいくつかありますが、こん
な感じで私は調べてみました(ソースにコメントが多いのでさっくりわかる人
も多いでしょうが)。

1. 「seconds」という文字列をもとに探してみると、display_timeの中の
   「-(sync_duration)」というのがそれのようです。これはdisplay_timeの3番
    目の引数として与えられています。
2.  display_timeを呼び出しているのはmanipulate_clockの中で、先ほどの3
    番目の引数にはtime_diff(read_time, startup_time)というのが入ります。
    time_diffのコードはさておき、read_timeとstartup_timeの差であるとい
    うのは名前と引数の雰囲気からして間違いないでしょう。
3.  read_timeは、display_timeのところで設定があります。
    gettimeofday(&read_time, NULL);、つまりこの時点での時刻を取得して
    います(man gettimeofday)。
4.  startup_timeも似たようなものであろうと想像がつきます。mainにありま
    した。gettimeofday(&startup_time, NULL);
5.  これで、この時間差は、コマンド起動時(main)のときの時刻と、実際に
    表示ルーチン(display_time)に到達したときの時刻の差であることがわか
    りました。
6.  time_diffを見てみると、

    time_diff(struct timeval subtrahend, struct timeval subtractor) {
     /*---------------------------------------------------------------------------
     The difference in seconds between two times in "timeval" format.
     ----------------------------------------------------------------------------*/
     return (subtrahend.tv_sec - subtractor.tv_sec)
               + (subtrahend.tv_usec - subtractor.tv_usec) / 1E6;

     ですね。秒の差とu秒の差を取り出して結果を返しています。
-- 
武藤 健志@ kmuto @ kmuto.jp
           Debian/JPプロジェクト   (kmuto@debian.org, kmuto@debian.or.jp)
           株式会社トップスタジオ  (kmuto@xxxxxxxxxxxxxxx)
URI: http://www.topstudio.co.jp/~kmuto/ (Debianな話題など)