#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. pom文件说明

    http://www.blogjava.net/hellxoul/archive/2013/05/16/399345.html

  2. HDU 5620 KK's Steel

    想了一下发现是斐波那契数列.....水题 #include <stdio.h> #include <algorithm> #include <string.h> # ...

  3. Codeforces #350

    A题: 题意:判断火星上的节假日最多和最少 分析:除以7,然后我们对原数模7的余数进行判断一下即可 #include <iostream> #include <cstdio> ...

  4. java 生成不重复的随机数

    import java.text.SimpleDateFormat;import java.util.Date; public class Test2 { public static void mai ...

  5. 使用LIBUSB实现和自定义通讯设备通讯--MFC代码在末尾

    LIBUSB是一款简单好用的USB通讯开发库,一般HID设备用该库通讯能大大降低开发周期,使用如下,首先需要为设备安装驱动 在libusb的bin目录下有一个inf_wirzed.exe的文件,该文件 ...

  6. APP导致界面卡死,iPhone卡死

    实测,是 Reachability 类创建实例过多导致 http://stackoverflow.com/questions/34063166/ios-9-app-freeze-with-consol ...

  7. 64脚和小于64脚的STM32进行AD时注意,参照电源处理方法(转)

    源:64脚和小于64脚的STM32进行AD时注意,参照电源处理方法 请注意,ADC_IN17上没有内部基准,将其说成基准电压概念不对. 所以横线以下的理解不对,如果将其做为参考,则其电压假定按1.2V ...

  8. CSS长度单位详解

    序言 长度单位可以总体的分为绝对长度单位和相对长度单位.CSS中最为大家熟知的无疑是px和em,但与此同时还存在pt, rem, vw, vh等其他计量单位,使用好它们可以大大增长我们的开发效率.本篇 ...

  9. 深入理解yield(转)

    yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法.只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: def addlist(a ...

  10. 【python之路11】集合数据类型(set)

    集合数据类型(set):集合是不重复的无需序列 1.集合数据类型的创建 a = {11,22,33} #或 a = set() #创建空集合,不能用a={},这样创建的是字典类型 2.集合转换(将可迭 ...