linux C 获取CPU Usage

linux c 代码读取CPU Usage, 单位是%

  • cpuusage.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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);
    nd = (double) (n->user + n->nice + n->system +n->idle+n->softirq+n->iowait+n->irq);

    id = (double) (n->idle); 
    sd = (double) (o->idle) ;   
    if((nd-od) != 0)
        cpu_use =100.0 - ((id-sd))/(nd-od)*100.00; 
    else 
        cpu_use = 0;
    return cpu_use;
}

void get_cpuoccupy (cpu_occupy_t *cpust)
{
    FILE *fd;
    char buff[256];
    cpu_occupy_t *cpu_occupy;
    cpu_occupy=cpust;

    fd = fopen ("/proc/stat", "r");
    if(fd == NULL)
    {
        perror("fopen:");
        return;
    }
    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(void)
{
    cpu_occupy_t cpu_stat1;
    cpu_occupy_t cpu_stat2;
    double cpu;
	
    get_cpuoccupy((cpu_occupy_t *)&cpu_stat1);
	sleep(1000);  //1s
    get_cpuoccupy((cpu_occupy_t *)&cpu_stat2);

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

    return cpu;
}

//测试
int main(void)
{
	int i = 0;

	for(i = 0; i < 10; i ++)
		printf("Current cpu usage: %.1f%%\r\n", get_sysCpuUsage());

	return 0;
}

运行结果:

[root@vultr tmp]# gcc cpuusage.c       
[root@vultr tmp]# ./a.out        
Current cpu usage: 1.0%
Current cpu usage: 0.0%
Current cpu usage: 0.0%
Current cpu usage: 1.0%
Current cpu usage: 2.0%
Current cpu usage: 0.0%
Current cpu usage: 2.0%
Current cpu usage: 1.0%
Current cpu usage: 0.0%
Current cpu usage: 1.0%
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取Linux系统各个CPU核心的使用率,可以使用C语言编写程序,通过读取/proc/stat文件中的信息来获取。 下面是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #define MAX_CPU_NUM 8 // 假设最多有8个CPU核心 int main() { int i; long int user1, nice1, sys1, idle1, iowait1, irq1, softirq1, steal1, guest1, guest_nice1; long int user2, nice2, sys2, idle2, iowait2, irq2, softirq2, steal2, guest2, guest_nice2; double usage[MAX_CPU_NUM]; while (1) { // 读取/proc/stat文件,获取CPU的使用情况 FILE* fp = fopen("/proc/stat", "r"); if (fp == NULL) { perror("fopen"); exit(1); } fscanf(fp, "cpu %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld\n", &user1, &nice1, &sys1, &idle1, &iowait1, &irq1, &softirq1, &steal1, &guest1, &guest_nice1); fclose(fp); // 等待一段时间,再次读取/proc/stat文件,获取CPU的使用情况 sleep(1); fp = fopen("/proc/stat", "r"); if (fp == NULL) { perror("fopen"); exit(1); } fscanf(fp, "cpu %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld\n", &user2, &nice2, &sys2, &idle2, &iowait2, &irq2, &softirq2, &steal2, &guest2, &guest_nice2); fclose(fp); // 计算每个CPU核心的使用率 for (i = 0; i < MAX_CPU_NUM; i++) { double total1 = user1 + nice1 + sys1 + idle1 + iowait1 + irq1 + softirq1 + steal1 + guest1 + guest_nice1; double total2 = user2 + nice2 + sys2 + idle2 + iowait2 + irq2 + softirq2 + steal2 + guest2 + guest_nice2; double idle_delta = idle2 - idle1; double total_delta = total2 - total1; usage[i] = 100.0 * (1.0 - idle_delta / total_delta); user1 = user2; nice1 = nice2; sys1 = sys2; idle1 = idle2; iowait1 = iowait2; irq1 = irq2; softirq1 = softirq2; steal1 = steal2; guest1 = guest2; guest_nice1 = guest_nice2; } // 输出每个CPU核心的使用率 for (i = 0; i < MAX_CPU_NUM; i++) { printf("CPU%d usage: %.2f%%\n", i, usage[i]); } printf("\n"); } return 0; } ``` 这个程序会不断循环读取/proc/stat文件,计算每个CPU核心的使用率,并输出结果。注意,程序中假设最多有8个CPU核心,如果实际系统中CPU核心数不足8个,可以根据实际情况修改代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值