2013-07-18 42 views
3

我需要查找從c代碼中的linux機器上應用電源後的系統時間。 像'time()'和gettimeofday()這樣的函數返回自開始以來的時間,而不是從開啓後的時間。 自開機以來,我如何查找時鐘滴答的時間或數量?Linux自開機以來獲取系統時間

在此先感謝!

+2

'uptime'把它交給你,但我不知道是否有一個API來訪問它,否則你會不得不稱其爲命令 – Cfreak

+1

[我可以通過調用哪些API來獲得系統正常運行時間?](http://stackoverflow.com/questions/1540627/what-api-do-i-call-to-get-the-system-uptime) – Cfreak

回答

3

參見:Wgat API do I call to get the System Time

請參閱SYSINFO()在

SYS/sysinfo.h

struct sysinfo { 
    long uptime;    /* Seconds since boot */ 
    unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ 
    unsigned long totalram; /* Total usable main memory size */ 
    unsigned long freeram; /* Available memory size */ 
    unsigned long sharedram; /* Amount of shared memory */ 
    unsigned long bufferram; /* Memory used by buffers */ 
    unsigned long totalswap; /* Total swap space size */ 
    unsigned long freeswap; /* swap space still available */ 
    unsigned short procs; /* Number of current processes */ 
    unsigned long totalhigh; /* Total high memory size */ 
    unsigned long freehigh; /* Available high memory size */ 
    unsigned int mem_unit; /* Memory unit size in bytes */ 
    char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding for libc5 */ 
}; 
7

此信息通過/proc文件系統API提供。具體而言,/proc/uptime。在C中,將其作爲普通文件打開並從中讀取一個浮點數。這將是開機後的秒數。如果讀取另一個FP值,則系統花費總共閒置多少秒。你只對第一個數字感興趣。

實施例:

float uptime; 
FILE* proc_uptime_file = fopen("/proc/uptime", "r"); 
fscanf(proc_uptime_file, "%f", &uptime); 

該值是以秒,浮點型。

您可以將其轉換回時鐘滴答:

uptime * sysconfig(_SC_CLK_TCK); 
+0

我正要提出同樣的...... :) –