如何使用c/c++实现读取linux cpu占用率的功能
时间: 2023-12-24 14:02:31 浏览: 25
可以使用C/C++通过读取/proc/stat文件来获取Linux系统的CPU占用率。具体实现可以参考以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 100
int main() {
FILE *fp;
char line[MAX_LINE_LENGTH];
char *token;
unsigned long long user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice;
while (1) {
fp = fopen("/proc/stat", "r");
fgets(line, MAX_LINE_LENGTH, fp);
fclose(fp);
if (strncmp(line, "cpu ", 4) == 0) {
token = strtok(line, " ");
token = strtok(NULL, " ");
user = strtoull(token, NULL, 10);
token = strtok(NULL, " ");
nice = strtoull(token, NULL, 10);
token = strtok(NULL, " ");
system = strtoull(token, NULL, 10);
token = strtok(NULL, " ");
idle = strtoull(token, NULL, 10);
token = strtok(NULL, " ");
iowait = strtoull(token, NULL, 10);
token = strtok(NULL, " ");
irq = strtoull(token, NULL, 10);
token = strtok(NULL, " ");
softirq = strtoull(token, NULL, 10);
token = strtok(NULL, " ");
steal = strtoull(token, NULL, 10);
token = strtok(NULL, " ");
guest = strtoull(token, NULL, 10);
token = strtok(NULL, " ");
guest_nice = strtoull(token, NULL, 10);
unsigned long long total = user + nice + system + idle + iowait + irq + softirq + steal;
unsigned long long idle_time = idle + iowait;
float usage = 100.0 * (total - idle_time) / total;
printf("CPU usage: %.2f%%\n", usage);
}
}
return 0;
}
```
该程序在一个无限循环中,每次读取/proc/stat文件中的第一行,提取出CPU的各项计数器,计算出CPU的占用率,并输出。