sysinfo系统调用没有返回正确的freeram值
作者:互联网
我最近使用sysinfo systemcall编写了以下C代码来显示系统统计信息,有趣的是sysinfo结构的freeram变量没有返回空闲RAM的数量而是返回当前的RAM使用量.我不得不使用一种解决方法,通过从totalram中减去freeram来显示正确的值.我试过谷歌搜索这个特定的变量但无济于事.对这种奇怪行为的任何洞察都会非常有帮助.
/*
* 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;
}
解决方法:
去掉
#include "syscalls.h"
可能是,你从某处借了代码并编辑过.双引号用于导入非官方头文件.实际上并不需要该自定义头文件.
这不是必需的.你的代码运行正常.
在我的电脑上,$free -m的freeram值与程序的info.freeram匹配.显然,freeram并不是你所认为的那样.
阅读有关http://www.redhat.com/advice/tips/meminfo.html的更多信息
MemFree是免费的记忆和MemFree缓冲区缓存是可用内存(您想要的).所以,你只是错误地理解了freeram一词.
标签:c-3,linux,operating-system,system-calls,sysinfo 来源: https://codeday.me/bug/20190902/1791685.html