首页 > 解决方案 > 如何以百分比百分比获取 C 程序中的 CPU 使用率

问题描述

我尝试使用 c 程序获取 cpu 使用率,但结果没有以百分比显示,这段代码有什么问题?也许有人可以澄清或提供另一种方法来恢复使用的 CPU。

我的代码:

 int GetCPULoad() {
    int FileHandler;
    char FileBuffer[1024];
    float load;

    FileHandler = open("/proc/loadavg", O_RDONLY);
    if(FileHandler < 0) {
        return -1; }
    read(FileHandler, FileBuffer, sizeof(FileBuffer) - 1);
    sscanf(FileBuffer, "%f", &load);
    close(FileHandler);
    return (int)(load * 100);
}

也许我可以用 /proc/stat 文件做到这一点,有人知道怎么做吗?

我尝试了另一个代码


    fp = fopen ("/proc/stat", "r");
    if (fp) {
    long long unsigned int user,nice,system,idle;
    int i = fscanf(fp,"%*s %llu %llu %llu %llu",&user,&nice,&system,&idle);
    int total_cpu_usage1;
    total_cpu_usage1 = user + nice + system + idle;
    sprintf( http_buf,"<br>CPU usage: %d ", total_cpu_usage1); tcp_write(&tcpbuf, sock, http_buf, strlen(http_buf) );
    fclose(fp);
    }

但结果相同:CPU 使用率:159838295

我怎样才能得到百分比?

标签: clinuxcpu-usage

解决方案


最简单的方法是使用具有不同范围和不同增量的多个循环。

for (i = 1; i < 10; i++) {
    ...
}
for (i = 10; i <= 30; i += 10) {
    ...
}
for (i = 60; i <= 120; i += 30) {
    ...
}

如果您真的必须在一个循环中执行此操作:

for (i = 1; i <= 120; 
        i = i < 10 ? i + 1 : 
                     (i < 30 ? i + 10 : i + 30))

for循环头的最后一部分i根据它所在的范围增加不同的值。


推荐阅读