70 lines
1.7 KiB
C
70 lines
1.7 KiB
C
#include <e.h>
|
|
#include "e_mod_main.h"
|
|
|
|
void
|
|
_mem_get_values (Config_Item * ci, int *real, int *swap, int *total_real,
|
|
int *total_swap)
|
|
{
|
|
FILE *pmeminfo = NULL;
|
|
int cursor = 0;
|
|
char *line, *field;
|
|
unsigned char c;
|
|
long int value = 0, mtotal = 0, stotal = 0, mfree = 0, sfree = 0;
|
|
ldiv_t ldresult;
|
|
long int liresult;
|
|
|
|
if (!(pmeminfo = fopen ("/proc/meminfo", "r")))
|
|
{
|
|
fprintf (stderr, "can't open /proc/meminfo");
|
|
return;
|
|
}
|
|
|
|
line = (char *) calloc (64, sizeof (char));
|
|
while (fscanf (pmeminfo, "%c", &c) != EOF)
|
|
{
|
|
if (c != '\n')
|
|
line[cursor++] = c;
|
|
else
|
|
{
|
|
field = (char *) malloc (strlen (line) * sizeof (char));
|
|
sscanf (line, "%s %ld kB", field, &value);
|
|
if (!strcmp (field, "MemTotal:"))
|
|
mtotal = value;
|
|
else if (!strcmp (field, "MemFree:"))
|
|
mfree = value;
|
|
else if (ci->real_ignore_buffers && (!strcmp (field, "Buffers:")))
|
|
mfree += value;
|
|
else if (ci->real_ignore_cached && (!strcmp (field, "Cached:")))
|
|
mfree += value;
|
|
else if (ci->real_ignore_cached && (!strcmp (field, "SwapCached:")))
|
|
sfree += value;
|
|
else if (!strcmp (field, "SwapTotal:"))
|
|
stotal = value;
|
|
else if (!strcmp (field, "SwapFree:"))
|
|
sfree = value;
|
|
|
|
free (line);
|
|
free (field);
|
|
cursor = 0;
|
|
line = (char *) calloc (64, sizeof (char));
|
|
}
|
|
}
|
|
fclose (pmeminfo);
|
|
|
|
if (stotal >= 1)
|
|
{
|
|
ldresult = ldiv (stotal, 100);
|
|
liresult = ldresult.quot;
|
|
ldresult = ldiv ((stotal - sfree), liresult);
|
|
}
|
|
|
|
ldresult = ldiv (mtotal, 100);
|
|
liresult = ldresult.quot;
|
|
ldresult = ldiv ((mtotal - mfree), liresult);
|
|
|
|
*real = (mtotal - mfree);
|
|
*swap = (stotal - sfree);
|
|
*total_real = mtotal;
|
|
*total_swap = stotal;
|
|
}
|