#include <stdio.h>

#define KIBIBYTE_SIZE 1024LL
#define MEBIBYTE_SIZE 1048576LL
#define GIBIBYTE_SIZE 1073741824LL
#define TEBIBYTE_SIZE 1099511627776LL typedef enum {
DIGIT_UNIT_BYTE,
DIGIT_UNIT_KIBIBYTE,
DIGIT_UNIT_MEBIBYTE,
DIGIT_UNIT_GIBIBYTE,
DIGIT_UNIT_TEBIBYTE
} DigitUnit; static char*
find_suffix (const char* str)
{
while (str[0] != 0 && (isdigit (str[0]) || strchr(",.-", str[0]) || isspace (str[0])))
str++;
return (char *) str;
} static char*
find_digit (const char* str)
{
while (str[0] != 0 && (!isdigit (str[0])))
str++;
return (char *) str;
} static DigitUnit
parse_unit_suffix (const char* suffix)
{
if (strlen (suffix) > 0) {
switch (tolower (suffix[0])) {
case 'b': return DIGIT_UNIT_BYTE;
case 'k': return DIGIT_UNIT_KIBIBYTE;
case 'm': return DIGIT_UNIT_MEBIBYTE;
case 'g': return DIGIT_UNIT_GIBIBYTE;
case 't': return DIGIT_UNIT_TEBIBYTE;
}
} return -1;
} long long unit_size (DigitUnit unit)
{
switch (unit) {
case DIGIT_UNIT_BYTE:
return 1;
case DIGIT_UNIT_KIBIBYTE:
return KIBIBYTE_SIZE;
case DIGIT_UNIT_MEBIBYTE:
return MEBIBYTE_SIZE;
case DIGIT_UNIT_GIBIBYTE:
return GIBIBYTE_SIZE;
case DIGIT_UNIT_TEBIBYTE:
return TEBIBYTE_SIZE;
}
} typedef struct {
long long total;
long long used;
} MemInfo; int
meminfo (MemInfo *meminfo)
{
char line[128];
FILE* fp;
long long totalmem;
long long usedmem;
char *digit;
char *suffix; totalmem = 0;
usedmem = 0;
digit = 0;
suffix = 0; memset (line, 0, 128);
fp = fopen ("/proc/meminfo", "rb");
if (fp < 0) {
return -1;
} fgets (line, 128, fp); digit = find_digit (line);
suffix = find_suffix (digit); if (sscanf (digit, "%d", &totalmem) == 1) {
meminfo->total = totalmem * unit_size(parse_unit_suffix(suffix));
} fgets (line, 128, fp); digit = find_digit (line);
suffix = find_suffix (digit); if (sscanf (digit, "%d", &usedmem) == 1) {
meminfo->used = usedmem * unit_size(parse_unit_suffix(suffix));
} return 0;
} int main()
{
MemInfo mem;
meminfo (&mem); printf ("total:%lld used:%lld\n", mem.total, mem.used); return 0;
}

linux下读取系统内存的demo的更多相关文章

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

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

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

    系统的内存使用信息能够在虚拟文件系统/proc/meminfo中找到,如图 所以只要打开/proc/meminfo文件,然后从中读取信息就好了 #include <stdio.h>#inc ...

  3. Linux 下增大tomcat内存

    我的服务器的配置: # OS specific support.  $var _must_ be set to either true or false. JAVA_OPTS="-Xms10 ...

  4. [转帖]linux下CPU、内存、IO、网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具

    linux下CPU.内存.IO.网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具 https://blog.51cto.com/hao360/1587165 linux_python关 ...

  5. Linux下获得系统时间的C语言实现

    Linux下获得系统时间的C语言的实现方法 #include<time.h> //C语言的头文件#include<stdio.h> //C语言的I/O   int main() ...

  6. (转)Linux下tomcat JVM内存设置步骤

    java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemoryError: Java heap space -------------- ...

  7. linux 下 取进程占用内存(MEM)最高的前10个进程

    # linux 下 取进程占用 cpu 最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head # linux 下 取进程占用内存 ...

  8. linux下查看系统属性

    inux下查看系统属性1.查看cpu信息查看所有cpu信息:cat /proc/cpuinfo查看cpu类型: grep "model name" /proc/cpuinfo2.查 ...

  9. Linux下修改tomcat内存

    由于服务器上放的tomcat太多,造成内存溢出. 常见的内存溢出有以下两种: java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemo ...

随机推荐

  1. 安装PIL遇到的问题

    配置:Win7 64位 不过折腾到最后,没有使用PIL,官方的PIL很久木有更新了,换了Pillow,是PIL的衍生吧,一直有更新,但是两者不可在同一环境共存. 1 Python version 2. ...

  2. (中等) HDU 1495 非常可乐,BFS。

    Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享 这一瓶可乐,而且一定要喝的和s ...

  3. Mac搭建Hadoop源码阅读环境

    1.本次Hadoop源码阅读环境使用的阅读工具是idea,Hadoop版本是2.7.3.需要安装的工具包括idea.jdk.maven.protobuf等 2.jdk,使用的版本是1.8版,在jdk官 ...

  4. MySQL的MyISAM和InnoDB

    1.概述 MySQL数据库其中一个特性是它的存储引擎是插件式的.用户可以根据应用需要选择存储引擎.Mysql默认支持多种存储引擎,以适用各种不同的应用需要. 默认情况下,创建表不指定表的存储引擎,则新 ...

  5. uses crt;

    1.uses CRT,表示引用CRT.pas单元.CRT.pas单元是Pascal最重要的单元之一,主要用于字符界面的操作,里面内置了清屏.光标定位.删除行.调整字符亮度.前景色.背景色等功能函数.2 ...

  6. IP头,TCP头,UDP头,MAC帧头定义(转)

    源:IP头,TCP头,UDP头,MAC帧头定义 一.MAC帧头定义 /*数据帧定义,头14个字节,尾4个字节*/ typedef struct _MAC_FRAME_HEADER { ]; //目的m ...

  7. CSS判断不同分辨率显示不同宽度布局CSS3技术支持IE6到IE8

    CSS判断不同分辨率浏览器(显示屏幕)显示不同宽度布局CSS3技术支持IE6到IE8.将用到css3 @media样式进行判断,但IE9以下版本不支持CSS3技术,这里DIVCSS5给大家介绍通过JS ...

  8. php 模式

    设计模式1.单例模式类的计划生育1.让该类在外界无法造对象2.让外界可以造一个对象,做一个静态方法返回对象3.在类里面通过静态变量控 class Dog { static $dx; public $t ...

  9. C#的逆变和协变

    out: 输出(作为结果),in:输入(作为参数) 所以如果有一个泛型参数标记为out,则代表它是用来输出的,只能作为结果返回,而如果有一个泛型参数标记为in,则代表它是用来输入的,也就是它只能作为参 ...

  10. Python3基础 闭包 简单示例

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...