85 lines
1.8 KiB
C++
85 lines
1.8 KiB
C++
#include "MemoryInfo.h"
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
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);
|
|
} |