linux读取每条内存使用,Linux c读取系统内存使用信息

系统的内存使用信息能够在虚拟文件系统/proc/meminfo中找到,如图

20180110235901226582.png

所以只要打开/proc/meminfo文件,然后从中读取信息就好了

#include

#include

#include

#include

#include

#define MEM_PART "/proc/meminfo"

//用于存储内存信息的结构体

struct mem_info

{

char MemTotal[20];

char MemFree[20];

char MemAvailable[20];

char Buffers[20];

char Cached[20];

};

typedef struct mem_info MEM_info,*pMEM_info;

//打开fileName指定的文件,从中读取第lineNumber行

//返回值:成功返回1,失败返回0

int get_file_line(char *result,char *fileName,int lineNumber)

{

FILE *filePointer;

int i=0;

char buffer[FILEBUFFER_LENGTH];

if((fileName==NULL)||(result==NULL))

{

return 0;

}

if(!(filePointer=fopen(fileName,"rb")))

{return 0;}

while((!feof(filePointer))&&(i

{

if(!fgets(buffer,FILEBUFFER_LENGTH,filePointer))

{

return 0;

}

i++;//差点又忘记加这一句了

}

/* printf("\n%d\n",sizeof(*result));

if(strlen(buffer)>sizeof(*result))//不能够这么写,虽然fgets读取一行后会在末尾加上‘\0‘,但是sizeof(result)得到的结果却是result本身类型的大小,所以不能够这么算。当静态数组传入函数时,在函数内部只能知道它是一个指针

{

return 0;

}*/

strcpy(result,buffer);

if(0!=fclose(filePointer))

{

return 0;

}

return 1;

}

//按行读取/proc/meminfo中的信息,并保存到mem结构体中

int get_mem_info(pMEM_info mem)

{

char buffer[300];

if(NULL==mem)

{

printf("\nget_mem_info:param null!\n");

return 0;

}

memset(mem,0,sizeof(MEM_info));

if(1==get_file_line(buffer,MEM_PART,1))//读取第一行

{

sscanf(buffer,"%*s %s",mem->MemTotal);

if(1==get_file_line(buffer,MEM_PART,2))//读取第二行

{   sscanf(buffer,"%*s %s",mem->MemFree);

if(1==get_file_line(buffer,MEM_PART,3))//读取第三行

{   sscanf(buffer,"%*s %s",mem->MemAvailable);

if(1==get_file_line(buffer,MEM_PART,4))//读取第四行

{   sscanf(buffer,"%*s %s",mem->Buffers);

if(1==get_file_line(buffer,MEM_PART,5))//读取第五行

{

sscanf(buffer,"%*s %s",mem->Cached);

return 1;

}

}

}

}

}

return 0;

}

int main()

{

MEM_info mem;

get_mem_info(&mem);

printf("\n%s %s %s %s %s\n",mem.MemTotal,mem.MemFree,mem.MemAvailable,mem.Buffers,mem.Cached);

return 1;

}

原文:http://www.cnblogs.com/thegodofthunder/p/7216923.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值