システムのuptimeを取得
1768 ワード
いくつかの方法があります.
1.コマンドuptimeの実行
2.clock_を使うgettime関数とsysinfo関数
3表示/proc/uptime
結果を見てみましょう.
次のコードはsysinfoを使用してシステムの起動時間を計算します.
実行結果:
1.コマンドuptimeの実行
2.clock_を使うgettime関数とsysinfo関数
#include <time.h>
#include <sys/times.h>
#include <unistd.h>
#include <sys/sysinfo.h>
void main(void)
{
struct timespec tp;
clock_gettime(CLOCK_MONOTONIC, &tp);
// clock_t ticks = times(NULL);
// printf("seconds: %d
", ticks / sysconf(_SC_CLK_TCK));
printf("up time: %f
", tp.tv_sec + (float)tp.tv_nsec/1000000000);
struct sysinfo info;
sysinfo(&info);
printf("up time (sysinfo.uptime): %d
", info.uptime);
}
3表示/proc/uptime
結果を見てみましょう.
$ ./a.out;uptime;cat /proc/uptime
up time: 4581.407706
up time (sysinfo.uptime): 4582
02:05:45 up 1:16, 3 users, load average: 0.08, 0.45, 0.95
4581.41 14391.24
次のコードはsysinfoを使用してシステムの起動時間を計算します.
#include <sys/sysinfo.h>
#include <time.h>
int main(void)
{
struct sysinfo info;
sysinfo(&info);
time_t boottime = time(NULL) - info.uptime;
struct timespec monotime;
clock_gettime(CLOCK_MONOTONIC, &monotime);
time_t curtime = boottime + monotime.tv_sec;
struct timespec realtime;
clock_gettime(CLOCK_REALTIME, &realtime);
printf("Boot time = %s", ctime(&boottime));
printf("Current time = %s", ctime(&curtime));
printf("Real Time = %s", ctime(&realtime.tv_sec));
return 0;
}
実行結果:
$ ./a.out
Boot time = Thu May 1 00:49:23 2014
Current time = Thu May 1 02:08:17 2014
Real Time = Thu May 1 02:08:18 2014