#include "MemoryInfo.h" #include #include #include MemoryInfo* MemoryInfo::m_pInstance=nullptr; MemoryInfo::Garbo MemoryInfo::garbo; MemoryInfo::MemoryInfo(/* args */) { } // MemoryInfo::~MemoryInfo() // { // } MemoryInfo* MemoryInfo::GetInstance() { if(m_pInstance==nullptr) { m_pInstance= new MemoryInfo(); } return m_pInstance; } float MemoryInfo::GetMemoryUsed() { float ret=0.0f; Mem_info info; getMemInfo(info); if(info.total!=0) ret=(100.0 * (info.total - info.available) / info.total); return ret; } void MemoryInfo::getMemInfo(Mem_info& info) { FILE* fpMemInfo = fopen("/proc/meminfo", "r"); if (NULL == fpMemInfo) { return ; } int i = 0; int value; char name[1024]; char line[1024]; int nFiledNumber = 2; int nMemberNumber = 5; while (fgets(line, sizeof(line) - 1, fpMemInfo)) { if (sscanf(line, "%s%u", name, &value) != nFiledNumber) { continue; } if (0 == strcmp(name, "MemTotal:")) { ++i; info.total = value; } else if (0 == strcmp(name, "MemFree:")) { ++i; info.free = value; } else if (0 == strcmp(name, "MemAvailable:")) { ++i; info.available = value; } else if (0 == strcmp(name, "Buffers:")) { ++i; info.buffers = value; } else if (0 == strcmp(name, "Cached:")) { ++i; info.cached = value; } if (i == nMemberNumber) { break; } } fclose(fpMemInfo); }