/proc/uptime 提供兩個數值(秒):系統啟動總時間、閒置進程累積時間。讀取第一個值即為系統運行時長。
$ cat /proc/uptime 3600.45 7200.90
第一欄 3600.45 秒 = 1 小時左右。
#include#include #include #include struct timeval get_uptime(void) { struct timeval now = {0, 0}; FILE *fp = fopen("/proc/uptime", "r"); if (!fp) return now; char buf[64]; if (fgets(buf, sizeof(buf), buf)) { char *dot = strchr(buf, '.'); if (dot && (dot - buf + 2) < 30) { buf[dot - buf + 2] = '\0'; // 保留小數點後 1 位 now.tv_sec = atol(buf); // 整數秒 } } fclose(fp); return now; } int main(void) { struct timeval up = get_uptime(); printf("uptime = %ld seconds\n", up.tv_sec); return 0; }
fgets 讀取整行,避免 fread 需指定長度的麻煩。strchr 定位小數點,截取整數部分轉換為 time_t。struct timeval 僅用 tv_sec,微秒欄位置零(uptime 精度通常只需秒)。gcc uptime.c -o uptime ./uptime # 輸出範例:uptime = 3600