#include #include #include #include #include static double uptime() { char * savelocale; char buf[2048]; FILE* file; if (!(file=fopen( "/proc/uptime", "r"))) { fprintf(stderr, "error opening uptime file\n"); exit(1); } savelocale = setlocale(LC_NUMERIC, NULL); setlocale(LC_NUMERIC,"C"); fscanf(file, "%s", buf); fclose(file); printf("Uptime: %s\n", buf); setlocale(LC_NUMERIC,savelocale); return atof(buf); } /* process age from jiffies to seconds via uptime */ static double process_age(const unsigned jf) { double sc_clk_tck = sysconf(_SC_CLK_TCK); printf("SC_CLK_TCK: %f\n", sc_clk_tck); assert(sc_clk_tck > 0); return uptime() - jf / sc_clk_tck; } int main(int argc, char *argv[]) { unsigned int proc_stt_jf = 0; int okay = fscanf(stdin, "%*d %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %ull", &proc_stt_jf); if(okay != 1) printf("Bad input\n"); printf("proc_stt_jf: %u\n", proc_stt_jf); printf("Process age: %f\n", process_age(proc_stt_jf)); return 0; }