技术基础:文件操作,字符串操作,数据类型转换,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;
}
#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;
}