我最近使用 sysinfo 系统调用编写了以下 C 代码来显示系统统计信息,有趣的是 sysinfo 结构的 freeram 变量不返回可用 RAM 的数量,而是返回当前 RAM 使用情况。我必须使用一种解决方法,通过从总内存中减去自由内存来显示正确的值。我尝试用谷歌搜索这个特定变量,但没有成功。任何对这种奇怪行为的洞察都会非常有帮助。
/*
* C program to print the system statistics like system uptime,
* total RAM space, free RAM space, process count, page size
*/
#include <sys/sysinfo.h> // sysinfo
#include <stdio.h>
#include <unistd.h> // sysconf
#include "syscalls.h" // just contains a wrapper function - error
int main()
{
struct sysinfo info;
if (sysinfo(&info) != 0)
error("sysinfo: error reading system statistics");
printf("Uptime: %ld:%ld:%ld\n", info.uptime/3600, info.uptime%3600/60, info.uptime%60);
printf("Total RAM: %ld MB\n", info.totalram/1024/1024);
printf("Free RAM: %ld MB\n", (info.totalram-info.freeram)/1024/1024);
printf("Process count: %d\n", info.procs);
printf("Page size: %ld bytes\n", sysconf(_SC_PAGESIZE));
return 0;
}
“免费公羊”字段对大多数人来说毫无意义。最接近真正的“免费内存”值的是从/proc/meminfo
并减去Committed_AS
from MemTotal
。如果正在使用交换区,结果可能为负(这意味着分配的内存多于物理内存所能容纳的内存);如果你也想将交换区算作内存,只需使用MemTotal+SwapTotal
作为你的总数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)