【发布时间】:2025-11-29 11:20:23
【问题描述】:
我提前为我的无能道歉。我在上一门课时需要这个,但 C 中的一切都让我一头雾水,一直在努力坚持下去。
我正在尝试解析来自 /proc/stat 的信息,以便计算每个内核的“当前”CPU 使用率并将其打印出来。我将通过从 /proc/stat 的新版本中减去旧版本的数字并将结果数字添加到最新的集合来计算“当前”使用情况(至少我认为是这样,我会在我到那里了)。无论如何,我对如何解析信息有点困惑。我知道结果是这样的:
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、steel、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[] 不是指针,但是当我使它们成为指针时,它们也不起作用。也就是说,我完全不知道如何从这里继续前进,我们将不胜感激。
谢谢
【问题讨论】: