zynq_7010/MemoryInfo.cpp

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);
}