[LTP] [PATCH] lib: add tst_read_meminfo / tst_get_avail_mem
Li Wang
liwang@redhat.com
Tue Jun 14 16:37:29 CEST 2016
Hi Jan,
On Tue, Jun 14, 2016 at 7:27 PM, Jan Stancek <jstancek@redhat.com> wrote:
> This patch adds 2 new functions that both parse data
> from /proc/meminfo.
It is a good proposal, but the achieved function seems a little bit
narrow for ltp-lib. Can we
rename the tst_mem.h to tst_proc.h, and makes the whole items of
procfs could be readable via the same interfaces? And the strict
parameter is not necessary for the function i think.
How about something like this?
-----------------------------------------
long read_proc(char *path, char *item)
{
FILE *fp;
char line[BUFSIZ], buf[BUFSIZ];
long val;
fp = fopen(path, "r");
if (fp == NULL)
tst_brkm(TBROK | TERRNO, cleanup, "fopen %s", path);
while (fgets(line, BUFSIZ, fp) != NULL) {
if (sscanf(line, "%64s %ld", buf, &val) == 2)
if (strcmp(buf, item) == 0) {
fclose(fp);
return val;
}
continue;
}
fclose(fp);
tst_res(TINFO, "cannot find \"%s\" in %s", item, path);
return -1;
}
long tst_read_meminfo(char *item)
{
return read_proc("/proc/meminfo", item);
}
long tst_read_self_status(char *item)
{
return read_proc("/proc/self/status", item);
}
// we can extend this interface easily by uniform prototype
long tst_read_blablabla(char *item)
{
return read_proc("/proc/blablabla...", item);
}
...
long tst_get_avail_mem(void)
{
long mem_available;
mem_available = tst_read_meminfo("memavailable:");
if (mem_available == -1) {
mem_available = tst_read_meminfo("memfree:");
mem_available += tst_read_meminfo("cached:");
}
return mem_available;
}
Regards,
Li Wang
More information about the ltp
mailing list