システムのuptimeを取得

1768 ワード

いくつかの方法があります.
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