#include <unistd.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
/* 獲取linux系統下內存信息 */
int get_mem_info( const char *name, int index )
{
FILE *stream;
char tmp[128];
char info[64];
int info_int = -1;
//sprintf( tmp, "cat /proc/meminfo | awk '$1 ~/%s/' | awk '{print $%d}'", name, index );
sprintf( tmp, "cat /proc/meminfo | grep %s | awk '{print $%d}'", name, index );
stream = popen( tmp, "r" );
if ( fread( info, 1, sizeof(info), stream ) > 0 ) {
info_int = atoi( info );
}
pclose( stream );
return info_int;
}
int main()
{
int total_size = get_mem_info( "MemTotal", 2 );
int free_size = get_mem_info( "MemFree", 2 );
printf( "%d %d\n", total_size, free_size );
exit(0);
}
linux下獲取系統內存信息
之前在一家公司做linux嵌入式,有一個需求就是獲取當前設備的總內存大小以及剩餘內存大小。
我們知道我們可以從/proc/meminfo文件中查看這兩個信息大小,運行如下命令:
上面內存的信息量很多,我們並不需要這麼多信息,我們要的也就其中的一行,爲此我們可以再進行一些過濾,再使用下grep命令,運行如下命令,然後就可以得到我們需要的那一行:
其實除了grep命令,我們還可以使用awk命令來過濾,運行如下,也能達到同樣的效果,$1代表第一列,也就是顯示第一列爲MemTotal的行。
我們得到了我們需要的行,接下來就是從這行分離出來我們需要的那一列,可以接着使用awk命令,我們需要的那個數值是在第2列,可以繼續提取,運行結果如下,就得到了我們想要的那個值:
這裏我們僅僅是用命令獲得了我們想要的數據,如果我們用C語言實現呢?其實也不難,使用popen函數打開上述命令,獲得流數據,然後fread讀取就可以了,代碼如下:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.