]> git.itanic.dy.fi Git - buddywatch/commitdiff
Intial commit
authorTimo Kokkonen <kaapeli@itanic.dy.fi>
Sat, 3 Dec 2011 16:32:07 +0000 (18:32 +0200)
committerTimo Kokkonen <kaapeli@itanic.dy.fi>
Sat, 3 Dec 2011 16:32:07 +0000 (18:32 +0200)
Signed-off-by: Timo Kokkonen <kaapeli@itanic.dy.fi>
.gitignore [new file with mode: 0644]
Makefile [new file with mode: 0644]
buddywatch.c [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..320edf7
--- /dev/null
@@ -0,0 +1,3 @@
+*.o
+buddywatch
+*~
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
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 (file)
index 0000000..2a207d3
--- /dev/null
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <ctype.h>
+
+#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;
+}