linux下读取系统内存的demo
- #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的更多相关文章
- linux 下查看系统内存使用情况的方法
在Windows系统中查看内存的使用情况很简单,想必大家都已经耳熟能详了,那么在linux系统如何查看内存使用情况呢?下面和大家分享在Linux 下查看内存使用情况的free命令: [root@scs ...
- Linux c读取系统内存使用信息
系统的内存使用信息能够在虚拟文件系统/proc/meminfo中找到,如图 所以只要打开/proc/meminfo文件,然后从中读取信息就好了 #include <stdio.h>#inc ...
- Linux 下增大tomcat内存
我的服务器的配置: # OS specific support. $var _must_ be set to either true or false. JAVA_OPTS="-Xms10 ...
- [转帖]linux下CPU、内存、IO、网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具
linux下CPU.内存.IO.网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具 https://blog.51cto.com/hao360/1587165 linux_python关 ...
- Linux下获得系统时间的C语言实现
Linux下获得系统时间的C语言的实现方法 #include<time.h> //C语言的头文件#include<stdio.h> //C语言的I/O int main() ...
- (转)Linux下tomcat JVM内存设置步骤
java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemoryError: Java heap space -------------- ...
- linux 下 取进程占用内存(MEM)最高的前10个进程
# linux 下 取进程占用 cpu 最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head # linux 下 取进程占用内存 ...
- linux下查看系统属性
inux下查看系统属性1.查看cpu信息查看所有cpu信息:cat /proc/cpuinfo查看cpu类型: grep "model name" /proc/cpuinfo2.查 ...
- Linux下修改tomcat内存
由于服务器上放的tomcat太多,造成内存溢出. 常见的内存溢出有以下两种: java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemo ...
随机推荐
- Spring MVC Json数据传递
json是一种常见的传递格式,是一种键值对应的格式.并且数据大小会比较小,方便传递.所以在开发中经常会用到json. 首先看一下json的格式: {key1:value1,key2:value2} 每 ...
- AppServ设置虚拟主机 及域名连接
1: 安装好AppServ2.5.9软件,官网是:http://www.appservnetwork.com/ ,2.59下载地址是:http://nchc.dl.sourceforge.net/so ...
- javascript之日期对象
学习要点: 日期对象 将日期对象转换为字符串 将日期对象中的日期和时间转换为字符串 日期对象中的日期 日期对象中的时间 设置日期对象中的日期 设置日期对象中的时间 与毫秒相关的方法 一.日期对象 在j ...
- brew udpate出现错误“/usr/local is not writable.”的问题解决
如图所示: 在命令行输入: sudo chown -R 当前登录的用户名 /usr/local 再次输入: brew update 问题解决.
- Spring MVC 关于分页的简单实现
据本人了解,目前较常用的分页实现办法有两种: 1.每次翻页都修改SQL,向SQL传入相关参数去数据库实时查出该页的数据并显示. 2.查出数据库某张表的全部数据,再通过在业务逻辑里面进行处理去取得某些数 ...
- 《算法导论》插入排序----InsertSort
算法导论,插入排序 public class InsertSort { public static double [] sort(double [] num) { for(int i =1; i< ...
- STM32串口寄存器操作(转)
源:STM32串口寄存器操作 //USART.C /************************************************************************** ...
- PHP 安装使用 gearman
1.安装服务器端: 官方下载,请到https://launchpad.net/gearmand. yum install boost-devel* gperf* libevent-devel* lib ...
- Yii实现Password Repeat Validate Rule
在使用Yii时遇到这样的需求:在一个注册的页面输入两次密码,并验证两次输入是否一致.可是password的repeat的字段在数据库 并不存在.问题来了,如何创建一个password_repeat的属 ...
- 微软企业库DBBA的研究
Summary:如何入门使用Data Access Application Block,可以参考Enterprise Library 3.1中文帮助:数据访问应用程序块.这篇文章侧重在DAAB工作原理 ...