1. 程式人生 > >獲取系統cpu使用率(linux C)

獲取系統cpu使用率(linux C)

user 系統 def can get gets 數組名 結構體 lin

typedef struct cpu_occupy_ //定義一個cpu occupy的結構體 { char name[20]; //定義一個char類型的數組名name有20個元素 unsigned int user; //定義一個無符號的int類型的user unsigned int nice; //定義一個無符號的int類型的nice unsigned int system; //定義一個無符號的int類型的system unsigned int idle; //定義一個無符號的int類型的idle unsigned int iowait; unsigned int irq; unsigned int softirq; }cpu_occupy_t; double cal_cpuoccupy (cpu_occupy_t *o, cpu_occupy_t *n) { double od, nd; double id, sd; double cpu_use ; od = (double) (o->user + o->nice + o->system +o->idle+o->softirq+o->iowait+o->irq);//第一次(用戶+優先級+系統+空閑)的時間再賦給od nd = (double) (n->user + n->nice + n->system +n->idle+n->softirq+n->iowait+n->irq);//第二次(用戶+優先級+系統+空閑)的時間再賦給od id = (double) (n->idle); //用戶第一次和第二次的時間之差再賦給id sd = (double) (o->idle) ; //系統第一次和第二次的時間之差再賦給sd if((nd-od) != 0) cpu_use =100.0 - ((id-sd))/(nd-od)*100.00; //((用戶+系統)乖100)除(第一次和第二次的時間差)再賦給g_cpu_used else cpu_use = 0; return cpu_use; } void get_cpuoccupy (cpu_occupy_t *cpust) { FILE *fd; int n; char buff[256]; cpu_occupy_t *cpu_occupy; cpu_occupy=cpust; fd = fopen ("/proc/stat", "r"); if(fd == NULL) { perror("fopen:"); exit (0); } fgets (buff, sizeof(buff), fd); sscanf (buff, "%s %u %u %u %u %u %u %u", cpu_occupy->name, &cpu_occupy->user, &cpu_occupy->nice,&cpu_occupy->system, &cpu_occupy->idle ,&cpu_occupy->iowait,&cpu_occupy->irq,&cpu_occupy->softirq); fclose(fd); } double get_sysCpuUsage() { cpu_occupy_t cpu_stat1; cpu_occupy_t cpu_stat2; double cpu; get_cpuoccupy((cpu_occupy_t *)&cpu_stat1); sleep(1); //第二次獲取cpu使用情況 get_cpuoccupy((cpu_occupy_t *)&cpu_stat2); //計算cpu使用率 cpu = cal_cpuoccupy ((cpu_occupy_t *)&cpu_stat1, (cpu_occupy_t *)&cpu_stat2); return cpu; }

獲取系統cpu使用率(linux C)