首页 > 代码库 > linux下读取系统内存的demo
linux下读取系统内存的demo
#include <stdio.h>#define KIBIBYTE_SIZE 1024LL#define MEBIBYTE_SIZE 1048576LL#define GIBIBYTE_SIZE 1073741824LL#define TEBIBYTE_SIZE 1099511627776LLtypedef 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 DigitUnitparse_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;intmeminfo (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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。