#include<stdlib.h> #include<stdio.h> #include<unistd.h> #define CPU_FILE_PROC_STAT "/proc/stat" /*the utilization of CPU */ struct cpu_usage_struct { unsigned long cpu_user; unsigned long cpu_sys; unsigned long cpu_nice; unsigned long cpu_idle; }; double get_cpu_use_rate(const struct cpu_usage_struct *cur, const struct cpu_usage_struct *old) { double user,sys,nice,idle,total; double cpu_rate; user = (double)(cur->cpu_user - old->cpu_user); sys = (double)(cur->cpu_sys - old->cpu_sys); nice = (double)(cur->cpu_nice - old->cpu_nice); idle = (double)(cur->cpu_idle - old->cpu_idle); total = user + sys + nice + idle; cpu_rate = (1-idle/total)*100; return cpu_rate; } double get_cpu_free_rate(const struct cpu_usage_struct *cur, const struct cpu_usage_struct *old) { double user,sys,nice,idle,total; double free_rate; user = (double)(cur->cpu_user - old->cpu_user); sys = (double)(cur->cpu_sys - old->cpu_sys); nice = (double)(cur->cpu_nice - old->cpu_nice); idle = (double)(cur->cpu_idle - old->cpu_idle); total = user + sys + nice + idle; free_rate = (idle /total)*100; return free_rate; } int get_cpuinfo_from_proc_stat(struct cpu_usage_struct *usage) { FILE *fp = NULL; char tmp[10]; fp = fopen(CPU_FILE_PROC_STAT,"r"); if(fp == NULL) { perror("fopen"); return -1; } printf("%s,%d/n",__FILE__,__LINE__); fscanf(fp,"%s %lu %lu %lu %lu",tmp,&(usage->cpu_user),&(usage->cpu_sys), &(usage->cpu_nice),&(usage->cpu_idle)); printf("%s %d/n",__FILE__,__LINE__); fclose(fp); printf("%s %d/n",__FILE__,__LINE__); return 1; } int main() { struct cpu_usage_struct *cur,*old; double use_rate,free_rate; old = (struct cpu_usage_struct*)malloc(sizeof(struct cpu_usage_struct)); if(old == NULL) { perror("malloc error"); return -1; } cur = (struct cpu_usage_struct*)malloc(sizeof(struct cpu_usage_struct)); if(cur == NULL) { perror("malloc error"); return -1; } get_cpuinfo_from_proc_stat(old); sleep(100); get_cpuinfo_from_proc_stat(cur); use_rate = get_cpu_use_rate(cur,old); free_rate = get_cpu_free_rate(cur,old); printf("use_rate:%lf,free_rate:%lf/n",use_rate,free_rate); return 1; } cat /proc/meminfo可读出内存信息 cat /proc/cpuinfo cat /proc/stat 这两个可以读cpu信息 详情参见/proc文件系统