#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. ELK 日志分析体系

    ELK   日志分析体系 ELK 是指 Elasticsearch.Logstash.Kibana三个开源软件的组合. logstash                       负责日志的收集,处 ...

  2. objective-c学习笔记2

    Objective-c学习笔记 1.cocoa的对象初始化一般使用alloc和init两个方法,不适用new,其中alloc用于分配内存,init用于初始化,因为初始化方法返回的对象可能和分配的对象不 ...

  3. jstree使用小结(一)

    项目中用到tree结构,使用了jstree做个笔记如下: 1. 官网: http://www.jstree.com/    有时候打不开,那就只能等打得开的时候再看了...O(∩_∩)O [PS: 一 ...

  4. php redis 函数手册

    Redis::__construct构造函数$redis = new Redis();connect, open 链接redis服务参数host: string,服务地址port: int,端口号ti ...

  5. 前端程序员应该知道的 15 个 jQuery 小技巧

    下面这些简单的小技巧能够帮助你玩转jQuery. 返回顶部按钮 预加载图像 检查图像是否加载 自动修复破坏的图像 悬停切换类 禁用输入字段 停止加载链接 切换淡入/幻灯片 简单的手风琴 让两个div高 ...

  6. Linux 系统分区

    合理的系统分区,便于后期管理和提高文件的搜索速度 分区格式说明 linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a—d)因为IDE硬盘最多四 个,SCSI,SA ...

  7. Struts2 属性驱动、模型驱动、异常机制

    模型驱动使用单独的VO(值对象)来封装请求参数和处理结果,属性驱动则使用Action实例来封装请求参数和处理结果. 一.使用模型驱动 1.login.action采用模型驱动模式实现,采用模型驱动时必 ...

  8. 拖动条(SeekBar)的功能和用法

    拖动条和进度条非常相似,只是进度条采用颜色填充来表明进度完成的程序,而拖动条则通过滑块的位置来标识数值——而且拖动条允许用户拖动滑块来改变值,因而拖动条通常用于对系统的某种数值进行调节,比如调节音量等 ...

  9. JS前端的分享功能

    给网页加上分享代码,借助网友的力量推广网站,目前已经很流行了 以下是网页代码 QQ空间分享代码如下: <a href="javascript:void(0);" onclic ...

  10. css块级标签,行内标签,行内块标签的转换(2)

            css块级标签,行内标签,行内块标签的转换 版权声明 本文原创作者:雨点的名字 作者博客地址:https://home.cnblogs.com/u/qdhxhz/ 在基础1中,我详细讲 ...