forked from enlightenment/enlightenment
99 lines
2.4 KiB
C
99 lines
2.4 KiB
C
#include "memusage.h"
|
|
|
|
unsigned long
|
|
_line_parse(const char *line)
|
|
{
|
|
char *p, *tok;
|
|
|
|
p = strchr(line, ':') + 1;
|
|
while (isspace(*p))
|
|
p++;
|
|
tok = strtok(p, " ");
|
|
return atol(tok);
|
|
}
|
|
|
|
void
|
|
_memusage_proc_getusage(unsigned long *mem_total,
|
|
unsigned long *mem_used,
|
|
unsigned long *mem_cached,
|
|
unsigned long *mem_buffers,
|
|
unsigned long *mem_shared,
|
|
unsigned long *swp_total,
|
|
unsigned long *swp_used)
|
|
{
|
|
char line[256];
|
|
int found = 0;
|
|
unsigned long tmp_swp_total = 0;
|
|
unsigned long tmp_swp_free = 0;
|
|
unsigned long tmp_mem_free = 0;
|
|
unsigned long tmp_mem_cached = 0;
|
|
unsigned long tmp_mem_slab = 0;
|
|
FILE *f;
|
|
|
|
*mem_total = 0;
|
|
*mem_used = 0;
|
|
*mem_cached = 0;
|
|
*mem_buffers = 0;
|
|
*mem_shared = 0;
|
|
*swp_total = 0;
|
|
*swp_used = 0;
|
|
|
|
f = fopen("/proc/meminfo", "r");
|
|
if (!f) return;
|
|
|
|
while (fgets(line, sizeof(line), f) != NULL)
|
|
{
|
|
if (!strncmp("MemTotal:", line, 9))
|
|
{
|
|
*mem_total = _line_parse(line);
|
|
found++;
|
|
}
|
|
else if (!strncmp("MemFree:", line, 8))
|
|
{
|
|
tmp_mem_free = _line_parse(line);
|
|
found++;
|
|
}
|
|
else if (!strncmp("Cached:", line, 7))
|
|
{
|
|
tmp_mem_cached = _line_parse(line);
|
|
found++;
|
|
}
|
|
else if (!strncmp("Slab:", line, 5))
|
|
{
|
|
tmp_mem_slab = _line_parse(line);
|
|
found++;
|
|
}
|
|
else if (!strncmp("Buffers:", line, 8))
|
|
{
|
|
*mem_buffers = _line_parse(line);
|
|
found++;
|
|
}
|
|
else if (!strncmp("Shmem:", line, 6))
|
|
{
|
|
*mem_shared = _line_parse(line);
|
|
found++;
|
|
}
|
|
else if (!strncmp("SwapTotal:", line, 10))
|
|
{
|
|
tmp_swp_total = _line_parse(line);
|
|
found++;
|
|
}
|
|
else if (!strncmp("SwapFree:", line, 9))
|
|
{
|
|
tmp_swp_free = _line_parse(line);
|
|
found++;
|
|
}
|
|
|
|
if (found >= 8)
|
|
break;
|
|
}
|
|
fclose(f);
|
|
|
|
*mem_cached = tmp_mem_cached + tmp_mem_slab;
|
|
*mem_used = *mem_total - tmp_mem_free - *mem_cached - *mem_buffers;
|
|
|
|
*swp_total = tmp_swp_total;
|
|
*swp_used = tmp_swp_total - tmp_swp_free;
|
|
}
|
|
|