系统的内存使用信息能够在虚拟文件系统/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读取系统内存使用信息的更多相关文章

  1. linux下读取系统内存的demo

    #include <stdio.h> #define KIBIBYTE_SIZE 1024LL #define MEBIBYTE_SIZE 1048576LL #define GIBIBY ...

  2. python获取系统内存占用信息的实例方法

    psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要应用于系统监控, ...

  3. linux 下查看系统内存使用情况的方法

    在Windows系统中查看内存的使用情况很简单,想必大家都已经耳熟能详了,那么在linux系统如何查看内存使用情况呢?下面和大家分享在Linux 下查看内存使用情况的free命令: [root@scs ...

  4. 【linux】查看系统内存占用

    1.查看内存情况 free -h 解释下基本概念 Mem 内存的使用信息Swap 交换空间的使用信息total 系统总的可用物理内存大小used 已被使用的物理内存大小free 还有多少物理内存可用s ...

  5. Linux中显示系统中USB信息的lsusb命令

    来源:Linux中国  原文:https://linux.cn/article-2448-1.html 通用串行总线(USB)被设计成为连接计算机外设的标准,如键盘.鼠标.打印机.数码相机.便携式媒体 ...

  6. 关于c# 中读取系统内存大小的问题。

    在程序中,调用WMI的时候,出现一个问题,就是我系统有插了两条内存条,共4G.然而自己只能在程序中查到安装内存为2G,感觉有点不淡定.这是之前的代码. static ManagementObjectS ...

  7. Linux 系统管理命令 - free - 查看系统内存信息

    命令详解 重要星级: ★★★★★ 功能说明: free 命令用于显示系统内存状态,具体包括系统物理内存.虚拟内存.共享内存和系统缓存等. 语法格式: free [option] free [选项] 说 ...

  8. 查看Linux系统内存、CPU、磁盘使用率和详细信息

    一.查看内存占用 1.free # free -m 以MB为单位显示内存使用情况 [root@localhost ~]# free -m total used free shared buff/cac ...

  9. Java获取Linux和Window系统CPU、内存和磁盘总使用率的情况

    这是一个工具类,获取的内容: CPU使用率:得到的是当前CPU的使用情况,这是算出的是两次500毫秒时间差的CPU使用率 内存使用率:[1 -  剩余的物理内存/(总的物理内存+虚拟内存) ] * 1 ...

随机推荐

  1. 家庭记账本之微信小程序(六)

    Wxss的学习 WXSS(WeiXin Style Sheets)是一套样式语言,用于描述WXML的组件样式. WXSS用来决定WXML的组件应该怎么显示. 为了适应广大的前端开发者,我们的WXSS具 ...

  2. C工程 交互 ceph 分布式存储系统

    网上看到有人问,如何在C项目里调用ceph系统对外提供的API,实现分布式存储. 我在网上搜到了相关信息,但是因为不是会员无法追加答案,故而,贴于此. 赠予有缘人:) ———————————————— ...

  3. 安装WIN7/WIN10上的 CPU版本的TensorFlow

    随手记 ancaconda Anaconda2-5.0.1-Windows-x86_64(python3.5 ancaconda python-3.5.2-amd64 安装TensorFlow的时候自 ...

  4. 解决mysql大小写敏感问题

    先在服务中 找到 my.min 文件 在 [mysqld] 下面添加一行: lower_case_table_names = 0 其中 0:区分大小写,1:不区分大小写 设置好后 需要重启服务   然 ...

  5. Go 初体验 - 令人惊叹的语法 - defer.2 - 如何提前执行?

    上一文中讲到 defer 会在宿主函数 return 之前调用,那么我们就是想在宿主函数执行到中间调用,怎么办呢? 1. 改变宿主函数逻辑,分成多个函数,需要的那个函数里 defer . 2. 使用匿 ...

  6. Python记录10:模块

    ''' 1. 什么是模块     模块就一系列功能的集合体 模块有三种来源:         1. 内置的模块         2. 第三方的模块:pip install +模块名称         ...

  7. POJ 3087 模拟

    给定两个长度为len的字符串s1和s2, 接着给出一个长度为len*2的字符串s12. 将字符串s1和s2通过一定的变换变成s12,找到变换次数 变换规则如下: 假设s1=12345,s2=67890 ...

  8. dedecms织梦(一)

    网站动静态转换 织梦后台--->系统--->系统设置--->SQL命令行工具 1.将网站所有栏目设置成动态页 update dede_arctype set isdefault=-1 ...

  9. PyQT的安装和配置

    安装pythonQt 操作系统:Windows 7 64位 python版本:3.4 PyQt5使用PIP安装 测试是否安装成功 导入PyQt5 没报错说明安装成功 pythonQt Designer ...

  10. [openjudge-贪心]装箱问题

    题目描述 描述 一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6.这些产品通常使用一个 6*6 ...