最近、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;
}