读取CPU信息
时间:2006-09-07 来源:lonelyair
应该比较容易
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
static int flag=0;
struct cpu_info
{
unsigned long user;
unsigned long system;
unsigned long nice;
unsigned long idle;
unsigned long iowait;
unsigned long irq;
unsigned long softirq;
};
static struct cpu_info cpu_old;
static struct cpu_info cpu_new;
static inline char *skip_token(const char *p)
{
while (isspace(*p)) p++;
while (*p && !isspace(*p)) p++;
return (char *)p;
}
int getCpu(int *rate,int *intrp)
{
int fd;
char buffer[4096], *p;
int len;
unsigned long eclips=0,used=0;
chdir("/proc");
fd = open("stat", O_RDONLY);
len = read(fd, buffer, sizeof(buffer)-1);
close(fd);
buffer[len] = '\0';
p=buffer;
if(flag==0)//first init
{
p = skip_token(p);
cpu_old.user=strtoul(p, &p, 10);//user
cpu_old.system=strtoul(p, &p, 10);//sys
cpu_old.nice=strtoul(p, &p, 10);//nice
cpu_old.idle=strtoul(p, &p, 10);//idle
cpu_old.iowait=strtoul(p, &p, 10);//iowait
cpu_old.irq=strtoul(p, &p, 10);//intr
cpu_old.softirq=strtoul(p, &p, 10);//softintr
*rate=0;
*intrp=0;
flag=1;
return 0;
}
else
{
p = skip_token(p);
cpu_new.user=strtoul(p, &p, 10);//user
cpu_new.system=strtoul(p, &p, 10);//sys
cpu_new.nice=strtoul(p, &p, 10);//nice
cpu_new.idle=strtoul(p, &p, 10);//idle
cpu_new.iowait=strtoul(p, &p, 10);//iowait
cpu_new.irq=strtoul(p, &p, 10);//intr
cpu_new.softirq=strtoul(p, &p, 10);//softintr
eclips+=cpu_new.user-cpu_old.user;
eclips+=cpu_new.system-cpu_old.system;
used=eclips;
eclips+=cpu_new.idle-cpu_old.idle;
if(eclips!=0)
{
*rate=used*100/eclips;
*intrp=(cpu_new.irq-cpu_old.irq)*100/eclips;
}
else
{
*rate=0;
*intrp=0;
}
cpu_old.idle=cpu_new.idle;
cpu_old.iowait=cpu_new.iowait;
cpu_old.irq=cpu_new.irq;
cpu_old.nice=cpu_new.nice;
cpu_old.softirq=cpu_new.softirq;
cpu_old.system=cpu_new.system;
cpu_old.user=cpu_new.user;
return 0;
}
}
#include <sys/stat.h>
#include <fcntl.h>
static int flag=0;
struct cpu_info
{
unsigned long user;
unsigned long system;
unsigned long nice;
unsigned long idle;
unsigned long iowait;
unsigned long irq;
unsigned long softirq;
};
static struct cpu_info cpu_old;
static struct cpu_info cpu_new;
static inline char *skip_token(const char *p)
{
while (isspace(*p)) p++;
while (*p && !isspace(*p)) p++;
return (char *)p;
}
int getCpu(int *rate,int *intrp)
{
int fd;
char buffer[4096], *p;
int len;
unsigned long eclips=0,used=0;
chdir("/proc");
fd = open("stat", O_RDONLY);
len = read(fd, buffer, sizeof(buffer)-1);
close(fd);
buffer[len] = '\0';
p=buffer;
if(flag==0)//first init
{
p = skip_token(p);
cpu_old.user=strtoul(p, &p, 10);//user
cpu_old.system=strtoul(p, &p, 10);//sys
cpu_old.nice=strtoul(p, &p, 10);//nice
cpu_old.idle=strtoul(p, &p, 10);//idle
cpu_old.iowait=strtoul(p, &p, 10);//iowait
cpu_old.irq=strtoul(p, &p, 10);//intr
cpu_old.softirq=strtoul(p, &p, 10);//softintr
*rate=0;
*intrp=0;
flag=1;
return 0;
}
else
{
p = skip_token(p);
cpu_new.user=strtoul(p, &p, 10);//user
cpu_new.system=strtoul(p, &p, 10);//sys
cpu_new.nice=strtoul(p, &p, 10);//nice
cpu_new.idle=strtoul(p, &p, 10);//idle
cpu_new.iowait=strtoul(p, &p, 10);//iowait
cpu_new.irq=strtoul(p, &p, 10);//intr
cpu_new.softirq=strtoul(p, &p, 10);//softintr
eclips+=cpu_new.user-cpu_old.user;
eclips+=cpu_new.system-cpu_old.system;
used=eclips;
eclips+=cpu_new.idle-cpu_old.idle;
if(eclips!=0)
{
*rate=used*100/eclips;
*intrp=(cpu_new.irq-cpu_old.irq)*100/eclips;
}
else
{
*rate=0;
*intrp=0;
}
cpu_old.idle=cpu_new.idle;
cpu_old.iowait=cpu_new.iowait;
cpu_old.irq=cpu_new.irq;
cpu_old.nice=cpu_new.nice;
cpu_old.softirq=cpu_new.softirq;
cpu_old.system=cpu_new.system;
cpu_old.user=cpu_new.user;
return 0;
}
}
相关阅读 更多 +