linux下獲取系統內存信息

  之前在一家公司做linux嵌入式,有一個需求就是獲取當前設備的總內存大小以及剩餘內存大小。
  我們知道我們可以從/proc/meminfo文件中查看這兩個信息大小,運行如下命令:



  上面內存的信息量很多,我們並不需要這麼多信息,我們要的也就其中的一行,爲此我們可以再進行一些過濾,再使用下grep命令,運行如下命令,然後就可以得到我們需要的那一行:



  其實除了grep命令,我們還可以使用awk命令來過濾,運行如下,也能達到同樣的效果,$1代表第一列,也就是顯示第一列爲MemTotal的行。



  我們得到了我們需要的行,接下來就是從這行分離出來我們需要的那一列,可以接着使用awk命令,我們需要的那個數值是在第2列,可以繼續提取,運行結果如下,就得到了我們想要的那個值:



  這裏我們僅僅是用命令獲得了我們想要的數據,如果我們用C語言實現呢?其實也不難,使用popen函數打開上述命令,獲得流數據,然後fread讀取就可以了,代碼如下:
#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);	
}


  有關awk編程可以網上搜下資料,這裏沒有詳細介紹。

發佈了34 篇原創文章 · 獲贊 25 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章