部分代码改编自来自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;
}

 

posted on 2017-07-24 14:55  南极上的雪  阅读(1654)  评论(0编辑  收藏  举报