我有一个打印一些系统统计信息的C程序。
#include <sys/sysinfo.h>
#include <stdio.h>
int main() {
int days, hours, mins;
struct sysinfo sys_info;
if(sysinfo(&sys_info) != 0)
perror("sysinfo");
// Uptime
days = sys_info.uptime / 86400;
hours = (sys_info.uptime / 3600) - (days * 24);
mins = (sys_info.uptime / 60) - (days * 1440) - (hours * 60);
printf("Uptime: %ddays, %dhours, %dminutes, %ldseconds\n",
days, hours, mins, sys_info.uptime % 60);
// Load Averages for 1,5 and 15 minutes
printf("Load Avgs: 1min(%ld) 5min(%ld) 15min(%ld)\n",
sys_info.loads[0], sys_info.loads[1], sys_info.loads[2]);
printf("Total Ram: %lluk\tFree: %lluk\n",
sys_info.totalram *(unsigned long long)sys_info.mem_unit / 1024,
sys_info.freeram *(unsigned long long)sys_info.mem_unit/ 1024);
// Number of processes currently running.
printf("Number of processes: %d\n", sys_info.procs);
return 0;
}
我的问题是负载平均值与/ proc / loadavg
不同./a.out
Uptime: 1days, 4hours, 1minutes, 16seconds
Load Avgs: 1min(13248) 5min(14880) 15min(11840)
Total Ram: 2052956k Free: 188104k
Number of processes: 265
为什么呢?我打印13248但“top”或“cat / proc / loadavg”给出0.24。有什么问题?
答案 0 :(得分:18)
调用不会返回“错误”值。请注意,类型是整数,因此不能返回正常运行时打印的浮点数。
有关如何解释返回值以及如何转换为更熟悉的浮点数的调查,请参阅this thread。
我的猜测(在阅读链接之前)是它表示为按比例缩放65,535(2 16 ),这似乎也是他们发现的。因此除以65536.0,或者更清洁(如注释中所指出的)使用SI_LOAD_SHIFT常量并除以(float)(1 << SI_LOAD_SHIFT)
。