- 締切済み
HP-UXのシステム起動時からの時間(uptime)をC言語で取る方法
HP-UXのシステム起動時からの時間(uptime)をC言語で取る方法を教えてください。 497日問題のような上限値があるのか?あればどのタイミングで上限に達するのか? 達したらどうなるのか?(0に戻る?)も出来れば教えていただきたいです。 カーネルのバージョンによる違いがあればお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- hidebun
- ベストアンサー率50% (92/181)
なるほど…。であれば、CPUの使用時間(ユーザー・カーネル)など、全てを 足しあわせて算出するほかないようですね。 自分の中にある時間情報も使えず、おそらく外部のネットワークに時間を 問い合わせるのも、禁止なんでしょうね。 それで分以下の精度となると、ちょっと今の私には解決案が思いつかないです。 申し訳ない。
- hidebun
- ベストアンサー率50% (92/181)
紹介したページにある、 00817 get_uptime(void) の実装でも同様ですか?
補足
なるほど。趣旨を説明していませんでした。すみません。 今回の目的は、システム時刻の変更に影響を受けない時間を取りたかったので、gettimeofday()のような時刻変更に影響を受けるものを使ってuptimeを取得する方法はNGなんです。すみません。
- hidebun
- ベストアンサー率50% (92/181)
http://net-snmp.sourceforge.net/dev/agent/system_8c-source.html の 00781 #if defined(hpux10) || defined(hpux11) 00782 pstat_getstatic(&pst_buf, sizeof(struct pst_static), 1, 0); 00783 boottime_csecs = pst_buf.boot_time * 100; あたりが参考になるかも。 あるいは、system("uptime > /foo/temp.txt"); などとして、uptimeの実行結果をテキストに出力させ、 ファイルの中身を確認するなど。
補足
回答ありがとうございます。 上のは起動した時間(boot_time)ですね。 pstat_getprocessor()のcpu稼動時間を合計するとuptimeに近い値は取れるんですが、数分ズレてるし、時間が経つとuptimeコマンドとの値の差が大きくなっていきます。 uptimeコマンドは分精度なんで使えないです。
- hidebun
- ベストアンサー率50% (92/181)
497日問題(?)など、詳しい仕様は知りません。 /proc/uptimeに以下のような情報がありませんか。 http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ja/ref-guide/s1-proc-topfiles.html ==== 350735.47 234388.90 最初の数字は、システムが起動されている時間の総数を秒単位で表しています。 2番目の数字はその時間のうちのアイドル時間を秒単位で表しています。 ==== 秒を取得できれば表示したい情報は、計算で求まるのではないかと思います。
補足
FedoraやCentOSなどのLinuxではそうですね。 HP-UXは/proc/uptimeがないので困ってます(^^;
お礼
何度もありがとうございます。 HP-UXのuptimeコマンドのソースが見れたらいいんですけどねぇ。 CPU使用時間の合計とuptimeコマンドの値がなぜ微妙にズレるのか…。 そこがミソですね。 もう少し待って回答がなければ質問を締め切りたいと思います。