C解析/proc/stat以计算每个内核的当前CPU使用率 [英] C Parsing /proc/stat to calculate current CPU usage for each core

查看:0
本文介绍了C解析/proc/stat以计算每个内核的当前CPU使用率的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我为我的无能提前道歉。我正在上的一门课需要这个,但C中的一切都超出了我的理解,我一直在努力坚持下去。

我正在尝试解析/proc/stat中的信息,这样我就可以计算每个内核的当前CPU使用率,并将其打印出来。我将通过从较新版本的/proc/stat中减去旧版本的数字并将得到的数字添加到最新的集合中来计算当前&q;的使用量(至少我是这样认为的,当我到达那个集合时,我会跨越这座桥)。无论如何,我对如何解析信息感到有点困惑。我知道结果是这样的:

cpu  1135030 3367 440838 5175504 85602 0 78716 0 0 0
cpu0 284682 935 110466 3027379 55475 0 27688 0 0 0
cpu1 282910 969 109421 719958 8029 0 22700 0 0 0
cpu2 284182 648 110727 715945 9275 0 16262 0 0 0
cpu3 283256 814 110223 712220 12822 0 12065 0 0 0

我知道最上面一行是所有核心的聚合,各行分别表示USER、NICE、SYSTEM、IDLE、iowait、irq、softirq、steal、Guest和Guest_NICE。

我的原始代码是:

int main() {
    FILE *state1;
    FILE *state2;
    int oldNumbers[7];
    int newNumbers[7];

    state1 = fopen("/proc/stat", "r");
    sleep(1);
    state2 = fopen("/proc/stat", "r");

    fscanf(state1, "%d %d %d %d %d %d %d", oldNumbers[0], oldNumbers[1], oldNumbers[2], oldNumbers[3], oldNumbers[4], oldNumbers[5], oldNumbers[6]);
    fscanf(state2, "%d %d %d %d %d %d %d", newNumbers[0], newNumbers[1], newNumbers[2], newNumbers[3], newNumbers[4], newNumbers[5], newNumbers[6]);

    fclose(state1);
    fclose(state2);

    return 0;
}

我明白为什么它不起作用了,因为我的oldNumbers[]和newNumbers[]不是指针,但当我将它们设为指针时,它们也不起作用。也就是说,我完全不知道如何继续前进,任何意见都将非常感谢。

谢谢

推荐答案

  • 您不需要两个指向文件的指针,只需要一个,然后您只需移回文件的开头进行第二次读取。
  • 如前所述,您需要在fscanf()
  • 中使用指针
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *statFP;
    int oldNumbers[7];
    int newNumbers[7];
    int diffNumbers[7];
    char cpu[10];  // Not used

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

    fscanf(statFP,
            "%s %d %d %d %d %d %d %d",
            cpu,
            &oldNumbers[0], 
            &oldNumbers[1],
            &oldNumbers[2],
            &oldNumbers[3],
            &oldNumbers[4],
            &oldNumbers[5],
            &oldNumbers[6]);

    sleep(1);
    rewind(statFP);

    fscanf(statFP,
            "%s %d %d %d %d %d %d %d",
            cpu,
            &newNumbers[0],
            &newNumbers[1],
            &newNumbers[2],
            &newNumbers[3],
            &newNumbers[4],
            &newNumbers[5],
            &newNumbers[6]);

    fclose(statFP);

    for (int ii = 0; ii < 7; ii++) {
        diffNumbers[ii] = newNumbers[ii] - oldNumbers[ii];
        printf("%d: %d
", ii, diffNumbers[ii]);
    }
    return 0;
}

另一个注意事项是,有一个名为sysstat(https://github.com/sysstat/sysstat)的Linux包,其中包含用于解析/proc中的信息的各种代码。值得一看。

这篇关于C解析/proc/stat以计算每个内核的当前CPU使用率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆