获取CPU,内存使用率,磁盘相关信息
2011-12-07 09:28
435 查看
CPU信息
boolget_cpuoccupy(CPU_OCCUPY*cpust)//对无类型get函数含有一个形参结构体类弄的指针O
{
FILE*fd;
charbuff[256];
CPU_OCCUPY*cpu_occupy;
cpu_occupy=cpust;
if((fd=fopen("/proc/stat","r"))<=0)
returnfalse;
memset(buff,0,256);
fgets(buff,sizeof(buff),fd);
sscanf(buff,"%s%u%u%u%u",cpu_occupy->name,&cpu_occupy->user,
&cpu_occupy->nice,&cpu_occupy->system,&cpu_occupy->idle);
fclose(fd);
returntrue;
}
//获取CPU频率MHZ
boolget_cpu_info(unsignedint*total)
{
FILE*fd;
charbuff[256];
charname[128],Hz[128],tmp[128];
char*p;
*total=0;
if((fd=fopen("/proc/cpuinfo","r"))<=0)
returnfalse;
memset(buff,0,256);
for(inti=0;i<7;i++)
{
fgets(buff,sizeof(buff),fd);
}
sscanf(buff,"%s%s%s%s",name,Hz,tmp,tmp);
p=strtok(tmp,".");
*total=atoi(p);
fclose(fd);
returntrue;
}
计算CPU使用率
intcal_cpuoccupy(CPU_OCCUPY*o,CPU_OCCUPY*n)
{
unsignedlongoldtatal,newtotal;
unsignedlongid,sd,nd;
intcpu_use=0;
oldtatal=(unsignedlong)(o->user+o->nice+o->system+o->idle);//第一次(用户+优先级+系统+空闲)的时间再赋给od
newtotal=(unsignedlong)(n->user+n->nice+n->system+n->idle);//第二次(用户+优先级+系统+空闲)的时间再赋给od
id=(unsignedlong)(n->user-o->user);//用户第一次和第二次的时间之差再赋给id
nd=(unsignedlong)(n->nice-o->nice);
sd=(unsignedlong)(n->system-o->system);//系统第一次和第二次的时间之差再赋给sd
if((newtotal-oldtatal)!=0)
cpu_use=(int)((sd+id+nd)*10000)/(newtotal-oldtatal);//((用户+系统)乖100)除(第一次和第二次的时间差)再赋给g_cpu_used
else
cpu_use=0;
returncpu_use;
}
内存信息
boolget_memoccupy(MEM_OCCUPY*mem)//对无类型get函数含有一个形参结构体类弄的指针O
{
FILE*fd;
charbuff[256],tmp[20];
MEM_OCCUPY*m;
m=mem;
if((fd=fopen("/proc/meminfo","r"))<=0)
{
returnfalse;
}
memset(buff,0,256);
fgets(buff,sizeof(buff),fd);
sscanf(buff,"%s%lu%s",m->name,&m->total,tmp);
memset(buff,0,256);
fgets(buff,sizeof(buff),fd);//从fd文件中读取长度为buff的字符串再存到起始地址为buff这个空间里
sscanf(buff,"%s%lu%s",m->name2,&m->free,tmp);
fclose(fd);//关闭文件fd
returntrue;
}
调用函数
boolqury_sys_resource(char*buf)
{
CPU_OCCUPYcpu_stat1;
CPU_OCCUPYcpu_stat2;
MEM_OCCUPYmem_stat;
unsignedintcpu_MHZ;
charxml[1024];
intcpu_used,memused;
floatcpu_use_per=0;
memset(&cpu_stat1,0,sizeof(cpu_stat1));
memset(&cpu_stat2,0,sizeof(cpu_stat2));
memset(&mem_stat,0,sizeof(mem_stat));
memset(xml,0,1024);
//第一次获取cpu使用情况
if(!get_cpuoccupy((CPU_OCCUPY*)&cpu_stat1))
{
if(debug_level)
{
cout<<"getcpustaterr!"<<endl;
}
sprintf(
buf,
"HTTP/1.1500Servererr\nServer:Brainaire\nConnection:close\nContent-Type:text/html;charset=UTF-8\n\n");
returnfalse;
}
//获取内存
if(!get_memoccupy((MEM_OCCUPY*)&mem_stat))
{
if(debug_level)
{
cout<<"getmemerystaterr!"<<endl;
}
sprintf(
buf,
"HTTP/1.1500Servererr\nServer:Brainaire\nConnection:close\nContent-Type:text/html;charset=UTF-8\n\n");
returnfalse;
}
if(!get_cpu_info(&cpu_MHZ))
{
if(debug_level)
{
cout<<"getcpuinfoerr!"<<endl;
}
sprintf(
buf,
"HTTP/1.1500Servererr\nServer:Brainaire\nConnection:close\nContent-Type:text/html;charset=UTF-8\n\n");
returnfalse;
}
sleep(1);
//第二次获取cpu使用情况
if(!get_cpuoccupy((CPU_OCCUPY*)&cpu_stat2))
{
if(debug_level)
{
cout<<"getcpustaterr!"<<endl;
}
sprintf(
buf,
"HTTP/1.1500Servererr\nServer:Brainaire\nConnection:close\nContent-Type:text/html;charset=UTF-8\n\n");
returnfalse;
}
//计算cpu使用率
cpu_used=cal_cpuoccupy((CPU_OCCUPY*)&cpu_stat1,
(CPU_OCCUPY*)&cpu_stat2);
cpu_use_per=(float)(cpu_used/100.0);
//memeryused
if((mem_stat.total-mem_stat.free)==0)
{
memused=100;
}
else
{
memused=(int)((mem_stat.total-mem_stat.free)*100
/mem_stat.total);
}
sprintf(
xml,
"<Message>\n<CpuTotal=”%d”Used=”%3.1f”/>\n<MemoryTotal=”%ld”Used=”%d”/>\n</Message>",
cpu_MHZ,cpu_use_per,mem_stat.total/1024,memused);
sprintf(
buf,
"HTTP/1.1200OK\nServer:Brainaire\nConnection:close\nContent-type:xml/text;\nContent-Length:%d\n\n%s",
strlen(xml),xml);
if(debug_level)
{
cout<<"memerytotal:"<<mem_stat.total/1024<<",used:"
<<memused<<endl;
cout<<"cpuused="<<cpu_use_per<<"%"<<endl;
cout<<buf;
}
returntrue;
}
获取磁盘分区情况
intget_disk_rw(constchar*disk_name)
{
FILE*fd;
chartmp[256],name[256],a[256],flag[256];
if((fd=fopen("/etc/mtab","r"))<=0)
{
if(debug_level)
{
perror("/etc/mtab");
}
return0;
}
while(fgets(tmp,sizeof(tmp),fd))
{
memset(flag,0,sizeof(flag));
sscanf(tmp,"%s%s%s%s",name,a,a,flag);
if(strcmp(name,disk_name)==0)
{
// cout<<flag<<endl;
for(inti=0;i<256;i++)
{
if((flag[i]=='r'&&((flag[i+1]=='o')||flag[i+1]
==','||flag[i+1]=='\0')))
{
return1;
}
if(flag[i+1]=='\0')
{
return0;
}
}
}
}
return0;
}
voidqury_single_disk_info(constchar*disk_path,char*buf)
{
FILE*fd;
chartmp[256],name[256];
unsignedlonglongtotal,used,avail;
floatftotal,favail;
if(!(fd=popen("df","r")))
{
sprintf(
buf,
"HTTP/1.1500Servererr\nServer:Brainaire\nConnection:close\nContent-Type:text/html;charset=UTF-8\n\n");
return;
}
while(fgets(tmp,sizeof(tmp),fd))
{
sscanf(tmp,"%s%llu%llu%llu",name,&total,&used,&avail);
if(strcmp(disk_path,name)==0)
{
ftotal=(float)(total/1000000.0);
favail=(float)(avail/1000000.0);
sprintf(
tmp,
"<Message>\n<DiskList>\n<DiskPath=\"%s\"Status=\"%d\"TotalSpace=\"%0.2f\"FreeSpace=\"%0.2f\"/>\n</DiskList>\n</Message>",
disk_path,get_disk_rw(disk_path),ftotal,favail);
sprintf(
buf,
"HTTP/1.1200OK\nServer:Brainaire\nConnection:close\nContent-type:xml/text;\nContent-Length:%d\n\n%s",
strlen(tmp),tmp);
if(debug_level)
cout<<buf<<endl;
return;
}
}
sprintf(tmp,"<Message>\n<DiskList>\n</DiskList>\n</Message>");
sprintf(
buf,
"HTTP/1.1200OK\nServer:Brainaire\nConnection:close\nContent-type:xml/text;\nContent-Length:%d\n\n%s",
strlen(tmp),tmp);
return;
}
voidqury_all_disk_info(char*buf)
{
FILE*fd;
chartmp[256],name[256],res_buf[MAX_BUF_SIZE];
unsignedlonglongtotal,used,avail;
floatftotal,favail;
memset(res_buf,0,MAX_BUF_SIZE);
if(!(fd=popen("df","r")))
{
sprintf(
buf,
"HTTP/1.1500Servererr\nServer:Brainaire\nConnection:close\nContent-Type:text/html;charset=UTF-8\n\n");
return;
}
sprintf(res_buf,"<Message>\n<DiskList>\n");
fgets(tmp,sizeof(tmp),fd);
while(fgets(tmp,sizeof(tmp),fd))
{
sscanf(tmp,"%s%llu%llu%llu",name,&total,&used,&avail);
ftotal=(float)(total/1000000.0);
favail=(float)(avail/1000000.0);
sprintf(
res_buf+strlen(res_buf),
"<DiskPath=\"%s\"Status=\"%d\"TotalSpace=\"%0.2f\"FreeSpace=\"%0.2f\"/>\n",
name,get_disk_rw(name),ftotal,favail);
}
sprintf(res_buf+strlen(res_buf),"</DiskList>\n</Message>");
sprintf(
buf,
"HTTP/1.1200OK\nServer:Brainaire\nConnection:close\nContent-type:xml/text;\nContent-Length:%d\n\n%s",
strlen(res_buf),res_buf);
if(debug_level)
cout<<buf<<endl;
return;
}
相关文章推荐
- SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息
- SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息
- C++/QT 获取系统CPU、内存、磁盘、进程相关信息
- asp.net中获取本机的相关信息!(CPU、内存、硬盘序列号等)
- linux获取内存、cpu、负载、网口流量、磁盘信息
- 获取系统磁盘、CPU、内存信息
- C#获取CPU占用率、内存占用、磁盘占用、进程信息
- C#获取CPU占用率、内存占用、磁盘占用、进程信息
- C#-获取磁盘,cpu,内存信息
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法
- C#获取CPU占用率、内存占用、磁盘占用、进程信息
- Android获取系统cpu信息,内存,版本,电量相关信息
- 获取cpu、内存、磁盘的使用率
- ASP.NET(c#)中取得当前计算机CPU 内存使用率等相关信息
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法
- ASP.NET(c#)中取得当前计算机CPU 内存使用率等相关信息
- java获取cpu,内存,磁盘等信息
- java获取cpu,内存,磁盘等信息 String类型转换为long,int
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法
- Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法