Linux 系统信息监控(CPU,DISC,Meminfo,流量和网速)

技术基础:文件操作,字符串操作,数据类型转换,Linux文件基础(打开方式,权限),mySQL语句和接口(连接数据库,插入数据库,删除数据,断开连接...)gcc编译器的使用,环境变量的配置。

注:技术是基础,但在项目中需要使用的很全面,值得实现一次!

/*下面是CPU利用率的使用代码(CentOS 64操作系统),在不同Linux版本中文件格式不同,原创代码,仅供参考,还望多多指教!*/

#include <stdio.h>
#include <stdlib.h>


double getRate();
long getLong(char* tmp);
void getOriData(long* recv_data);

int main()
{
    double rb_CPU_rate;
    rb_CPU_rate =  getRate();
    printf("%0.2f     \n",rb_CPU_rate);
    return 0;
}



void getOriData(long* recv_data)
{
    char buff[1024 * 2];
    FILE *fd = fopen("/proc/stat","rt");
    long lCPU[9];
    char* tmp = NULL;
    if(fd == NULL)
    {
     exit(0);
    }
   
/*    memset(buff,0,sizeof(buff));*/

     fread(buff,1,sizeof(buff)-1,fd);
    tmp = buff;
  /*  tmp = strstr(buff,"cpu");*/
    /*printf("%s    \n",tmp);*/
   /* tmp += 3;
    while(tmp == ' ') tmp += 1;
    long ltmp = atol(tmp);
    printf("ltmp = %0.2f    \n",(double)ltmp);
*/
    tmp += 3;  
    lCPU[0] = getLong(tmp);
    /*printf("%0.2f   \n",(double)lCPU[0]);*/

    tmp += 8;
    lCPU[1] = getLong(tmp);

    tmp += 3;
    lCPU[2] = getLong(tmp);

    tmp += 6;
    lCPU[3] = getLong(tmp);  
  
    tmp += 8;
    lCPU[4] = getLong(tmp);  
  
    tmp += 4;
    lCPU[5] = getLong(tmp);  

    tmp += 4;
    lCPU[6] = getLong(tmp);  
  
    tmp += 5;
    lCPU[7] = getLong(tmp); 

    tmp += 2;
    lCPU[8] = getLong(tmp); 

    /*printf("%0.2f   \n",(double)lCPU[0]);
    printf("%0.2f   \n",(double)lCPU[1]);
    printf("%0.2f   \n",(double)lCPU[2]);
    printf("%0.2f   \n",(double)lCPU[3]);
    printf("%0.2f   \n",(double)lCPU[4]);
    printf("%0.2f   \n",(double)lCPU[5]);
    printf("%0.2f   \n",(double)lCPU[6]);
    printf("%0.2f   \n",(double)lCPU[7]);
    printf("%0.2f   \n",(double)lCPU[8]);
*/
 
    recv_data[0] = lCPU[0] + lCPU[1] + lCPU[2] + lCPU[3] + lCPU[4] + lCPU[5] + lCPU[6] + lCPU[7] + lCPU[8];
  /*  printf("total cpu time%f     \n",(double)recv_data[0]);*/
    recv_data[1] = lCPU[3];
   /* printf("idle cpu time%f     \n",(double)recv_data[1]);*/
    fclose(fd);
}

long getLong(char* temp)
{
    long lNum = 0;
     
    while(*temp == ' '){
    temp += 1;
    }
    lNum =  atol(temp);

    return lNum;
   
}

double getRate()
{
    double rate;
    long rec_data1[2];     /*rec total and idle*/
    long rec_data2[2];
    double rate1;
    double rate2;
    double rate3;
    double rate4;

    getOriData(rec_data1);
    usleep(50000);
    getOriData(rec_data2);
    rate = (double)(rec_data2[1] - rec_data1[1])/(rec_data2[0] - rec_data1[0]);
    rate = 1 - rate;

    usleep(50000);


    getOriData(rec_data1);
    usleep(50000);
    getOriData(rec_data2);
    rate1 = (double)(rec_data2[1] - rec_data1[1])/(rec_data2[0] - rec_data1[0]);
    rate1 = 1 - rate1;

    usleep(50000);

    getOriData(rec_data1);
    usleep(50000);
    getOriData(rec_data2);
    rate2 = (double)(rec_data2[1] - rec_data1[1])/(rec_data2[0] - rec_data1[0]);
    rate2 = 1 - rate2;

    usleep(50000);


    getOriData(rec_data1);
    usleep(50000);
    getOriData(rec_data2);
    rate3 = (double)(rec_data2[1] - rec_data1[1])/(rec_data2[0] - rec_data1[0]);
    rate3 = 1 - rate3;

    rate = (rate + rate1 + rate2 +rate3)/4;
    return rate;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值