[C/C++,Linux]sysinfo()で取得できるメモリ量についてメモ。

メモリの枚数に気をつける。
sysinfo()で取得できるメモリ量(totalramなど)は1枚あたりの量になるらしい。全体を求めるにはmem_unit分計算する必要がある。

C – sysinfo() returning bad values i686
http://stackoverflow.com/questions/4229415/c-sysinfo-returning-bad-values-i686

sysinfo(2) – Linux man page
http://linux.die.net/man/2/sysinfo

#include <stdio.h>
#include <linux/kernel.h>
#include <sys/sysinfo.h>

int main()
{
	struct sysinfo info;

	unsigned long totalram = 0;
	unsigned long freeram = 0;
	
	if( sysinfo(&info) != 0 )
	{
		return -1;
	}

	totalram = (info.totalram * info.mem_unit) / 1024;
	freeram = (info.freeram * info.mem_unit ) / 1024;
	
	printf("{\"val\":{\"totalram\":%ld,\"freeram\":%ld,\"useram\":%ld},\"err\":\"\"}",
		totalram,
		freeram,
		totalram - freeram);

    return 0;
	
}

VMのLinuxでテストしてから本物で動かすまで気づかなかった。これ、メモリ容量違うのが同時に刺さっていたらどうなるのだろうか。。。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


This blog is kept spam free by WP-SpamFree.