Linux c读取系统内存使用信息

Posted 南极上的雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux c读取系统内存使用信息相关的知识,希望对你有一定的参考价值。

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

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

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#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<lineNumber))
    {
        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;

}

 

以上是关于Linux c读取系统内存使用信息的主要内容,如果未能解决你的问题,请参考以下文章

请问怎么用c语言获取电脑(windows)的cpu,内存,硬盘利用率等信息?Linux系统一样吗?

linux系统启动流程

linux 共享内存 可不可以不加锁呢? 系统有两个进程,一个负责写入,一个负责读取

Linux系统下怎么查看应用CPU、内存、负载?

Linux 内核 内存管理Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )

linux怎么查看内存大小,linux怎么查看内存使用情况