我最近使用 sysinfo 系统调用编写了以下 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"

可能是,您从某处借用了代码并进行了编辑。双引号用于导入非官方的头文件。该自定义头文件并不是真正需要的。

不需要。您的代码将运行良好。

在我的 PC 上,$free -m 的 freeram 值与程序的 info.freeram 匹配。显然,freeram 并不是你认为它显示的那样。

阅读有关 http://www.redhat.com/advice/tips/meminfo.html 的更多信息

MemFree 是可用内存,而 MemFree + Buffers + Cached 是可用内存(你想要的)。因此,您只是错误地理解了 freeram 一词。

关于c - sysinfo 系统调用未返回正确的 freeram 值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8987636/

10-11 21:13