From 72484e6dd6d2c80d9ec7b358e840824b6fa8428c Mon Sep 17 00:00:00 2001 From: Timo Kokkonen Date: Sat, 3 Dec 2011 18:32:07 +0200 Subject: [PATCH] Intial commit Signed-off-by: Timo Kokkonen --- .gitignore | 3 +++ Makefile | 10 ++++++++ buddywatch.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 buddywatch.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..320edf7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.o +buddywatch +*~ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..405d82a --- /dev/null +++ b/Makefile @@ -0,0 +1,10 @@ +buddywatch: buddywatch.c + gcc -Wall -g -O2 $^ -o $@ + +TAGS: + etags *.[ch] + +clean: + rm -rfv buddywatch *.o *~ + +.PHONY: TAGS clean diff --git a/buddywatch.c b/buddywatch.c new file mode 100644 index 0000000..2a207d3 --- /dev/null +++ b/buddywatch.c @@ -0,0 +1,65 @@ +#include +#include +#include +#include + +#define MAX_ORDER 11 + +int main(int argc, char *argv[]) +{ + long long int buddy[MAX_ORDER], bud[MAX_ORDER], tot; + long int i; + FILE *file; + char str[1024], *s; + + while (1) + { + file = fopen("/proc/buddyinfo", "r"); + if (!file) + perror("fopen failed"); + + for (i = 0; i < MAX_ORDER; i++) + buddy[i] = 0; + + while (fgets(str, sizeof(str), file)) { + for (i = 0; i < sizeof(str); i++) + if (str[i] == 'z') + break; + + for (; i < sizeof(str); i++) + if (isspace(str[i])) + break; + + for (; i < sizeof(str); i++) + if (!isspace(str[i])) + break; + + for (; i < sizeof(str); i++) + if (isspace(str[i])) + break; + + s = &str[i]; + + i = sscanf(s, " %lld %lld %lld %lld" + "%lld %lld %lld %lld %lld %lld %lld\n", + &bud[0], &bud[1], &bud[2], &bud[3], &bud[4], + &bud[5], &bud[6], &bud[7], &bud[8], &bud[9], + &bud[10]); + for (i = 0; i < MAX_ORDER; i++) + buddy[i] += bud[i]; + } + + tot = 0; + for (i = 0; i < MAX_ORDER; i++) { + printf("% 5lld.%02lldM", + (buddy[i] * (1 << (i + 2))) >> 10, + (buddy[i] * (1 << (i + 2))) % 1024 * 100 / 1024); + tot += buddy[i] * (1 << (i + 2)); + } + printf("% 5lldM\n", tot >> 10); + sleep(1); + + fclose(file); + } + return 0; +} -- 2.44.0