linux下获取系统内存信息

  之前在一家公司做linux嵌入式,有一个需求就是获取当前设备的总内存大小以及剩余内存大小。
  我们知道我们可以从/proc/meminfo文件中查看这两个信息大小,运行如下命令:

linux下获取系统内存信息_第1张图片

  上面内存的信息量很多,我们并不需要这么多信息,我们要的也就其中的一行,为此我们可以再进行一些过滤,再使用下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编程可以网上搜下资料,这里没有详细介绍。

你可能感兴趣的:(linux,内存,awk,文件)