From 5dc2656b8e70de63f8c3425952a5865b2728e9a0 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 21 Sep 2012 17:41:28 +0400 Subject: [PATCH] system/helpers.cpp: add function to get total/free mem without cached/buffers --- src/system/helpers.cpp | 32 ++++++++++++++++++++++++++++++++ src/system/helpers.h | 1 + 2 files changed, 33 insertions(+) diff --git a/src/system/helpers.cpp b/src/system/helpers.cpp index 334163f51..cdb1ea84e 100644 --- a/src/system/helpers.cpp +++ b/src/system/helpers.cpp @@ -33,6 +33,7 @@ #include /* or */ #include #include +#include #include @@ -200,3 +201,34 @@ int get_fs_usage(const char * dir) } return ret; } + +bool get_mem_usage(unsigned long &kbtotal, unsigned long &kbfree) +{ + unsigned long cached = 0, buffers = 0; + kbtotal = kbfree = 0; + + FILE * f = fopen("/proc/meminfo", "r"); + if (!f) + return false; + + char buffer[256]; + while (fgets(buffer, 255, f)) { + if (!strncmp(buffer, "Mem", 3)) { + if (!strncmp(buffer+3, "Total", 5)) + kbtotal = strtoul(buffer+9, NULL, 10); + else if (!strncmp(buffer+3, "Free", 4)) + kbfree = strtoul(buffer+8, NULL, 10); + } + else if (!strncmp(buffer, "Buffers", 7)) { + buffers = strtoul(buffer+8, NULL, 10); + } + else if (!strncmp(buffer, "Cached", 6)) { + cached = strtoul(buffer+7, NULL, 10); + break; + } + } + fclose(f); + kbfree = kbfree + cached + buffers; + printf("mem: total %ld cached %ld free %ld\n", kbtotal, cached, kbfree); + return true; +} diff --git a/src/system/helpers.h b/src/system/helpers.h index ee1a09f8a..7707cce05 100644 --- a/src/system/helpers.h +++ b/src/system/helpers.h @@ -32,5 +32,6 @@ bool file_exists(const char *filename); void wakeup_hdd(const char *hdd_dir); int check_dir(const char * dir); int get_fs_usage(const char * dir); +bool get_mem_usage(unsigned long &total, unsigned long &free); #endif