部分代码改编自来自http://blog.csdn.net/primeprime/article/details/41458731
主要的原理就是获取top -n 1 | grep Cpu执行的结果,并且解析出需要的参数。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #define READ 1 #define WRITE 2 #define CPU_ORDER "top -n 1 | grep Cpu" //执行命令行,并且读取\写入数据 //参数一:命令行 //参数二:执行结果 //参数三:读写选项,默认为1就好,我并没有写写命令行有关的函数 //返回值:成功返回1,失败返回0 //待修改:我并没有写写命令行有关的函数,不过不影响功能 int executeCmd(char *cmd,char *result,int option) { char buffer[1024]; char fileOption[10]="r"; FILE *file=NULL; if((NULL==cmd)||(NULL==result)) { printf("\nexecuteCmd param null!\n"); return 0; } switch(option) { case READ: { strcpy(fileOption,"r"); break; } case WRITE: { strcpy(fileOption,"w"); break; } default: { break; } } if(NULL==(file=popen(cmd,fileOption)))//打开通道 { perror("executeCmd popen fail!"); return 0; } strcpy(result,""); while(NULL!=fgets(buffer,1024,file))//读取结果 { strcat(result,buffer); } if(-1==pclose(file))//关闭通道 { perror("executeCmd pclose fail!"); return 0; } return 1; } //获取cpu的用户使用率和系统使用率 //参数一、参数二:存储cpu用户使用率和系统使用率的参数 int getCpuInfo(char *cpuUser,char *cpuSystem) { char buffer[2000]=""; int flag; if((NULL==cpuUser)||(NULL==cpuSystem)) { printf("\ngetCpuInfo param null!\n"); return 0; } if(1==(flag=executeCmd(CPU_ORDER,buffer,READ)))//执行top -n 1 | grep Cpu命令 { sscanf(buffer,"%*s%s%*s%s%*s",cpuUser,cpuSystem);//读取cpu用户使用率和系统使用率 } return 1; } int main() { char str1[20]="none"; char str2[20]="none"; getCpuInfo(str1,str2); printf("\n%s %s\n",str1,str2); return 0; }