linux cpu使用率 c,获取系统cpu使用率(linux C)

typedef struct cpu_occupy_ //定义一个cpu occupy的结构体

{

char name[20]; //定义一个char类型的数组名name有20个元素

unsigned int user; //定义一个无符号的int类型的user

unsigned int nice; //定义一个无符号的int类型的nice

unsigned int system; //定义一个无符号的int类型的system

unsigned int idle; //定义一个无符号的int类型的idle

unsigned int iowait;

unsigned int irq;

unsigned int softirq;

}cpu_occupy_t;

double cal_cpuoccupy (cpu_occupy_t *o, cpu_occupy_t *n)

{

double od, nd;

double id, sd;

double cpu_use ;

od = (double) (o->user + o->nice + o->system +o->idle+o->softirq+o->iowait+o->irq);//第一次(用户+优先级+系统+空闲)的时间再赋给od

nd = (double) (n->user + n->nice + n->system +n->idle+n->softirq+n->iowait+n->irq);//第二次(用户+优先级+系统+空闲)的时间再赋给od

id = (double) (n->idle); //用户第一次和第二次的时间之差再赋给id

sd = (double) (o->idle) ; //系统第一次和第二次的时间之差再赋给sd

if((nd-od) != 0)

cpu_use =100.0 - ((id-sd))/(nd-od)*100.00; //((用户+系统)乖100)除(第一次和第二次的时间差)再赋给g_cpu_used

else

cpu_use = 0;

return cpu_use;

}

void get_cpuoccupy (cpu_occupy_t *cpust)

{

FILE *fd;

int n;

char buff[256];

cpu_occupy_t *cpu_occupy;

cpu_occupy=cpust;

fd = fopen ("/proc/stat", "r");

if(fd == NULL)

{

perror("fopen:");

exit (0);

}

fgets (buff, sizeof(buff), fd);

sscanf (buff, "%s %u %u %u %u %u %u %u", cpu_occupy->name, &cpu_occupy->user, &cpu_occupy->nice,&cpu_occupy->system, &cpu_occupy->idle ,&cpu_occupy->iowait,&cpu_occupy->irq,&cpu_occupy->softirq);

fclose(fd);

}

double get_sysCpuUsage()

{

cpu_occupy_t cpu_stat1;

cpu_occupy_t cpu_stat2;

double cpu;

get_cpuoccupy((cpu_occupy_t *)&cpu_stat1);

sleep(1);

//第二次获取cpu使用状况

get_cpuoccupy((cpu_occupy_t *)&cpu_stat2);

//计算cpu使用率

cpu = cal_cpuoccupy ((cpu_occupy_t *)&cpu_stat1, (cpu_occupy_t *)&cpu_stat2);

return cpu;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值