c - 如何以百分比百分比获取 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
我怎样才能得到百分比?
解决方案
最简单的方法是使用具有不同范围和不同增量的多个循环。
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
根据它所在的范围增加不同的值。
推荐阅读
- python - Mysql问题创建和读取db问题
- microsoft-graph-api - 无法使用 Graph API 从重复事件中检索 cancelledOccurences
- c# - 向相机方向旋转第三人称?
- arrays - 从数组中删除字符 - Powershell
- angular - Angular-9 构建不包括 /assets 中的符号链接文件夹
- javascript - for 循环迭代和省略
- javascript - 如何根据 Node JS 发送的 JSON 数据在我的 HTML 页面上显示图表
- c++ - 在旧 C++98 中*安全*实现智能指针向量的最简单方法?
- powershell - 格式化Powershell脚本中2个日期时间变量之间的时间差
- c# - Xamarin Forms 绑定到嵌套属性不起作用