]> git.itanic.dy.fi Git - buddywatch/blob - buddywatch.c
Intial commit
[buddywatch] / buddywatch.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <ctype.h>
5
6 #define MAX_ORDER 11
7
8 int main(int argc, char *argv[])
9 {
10         long long int buddy[MAX_ORDER], bud[MAX_ORDER], tot;
11         long int i;
12         FILE *file;
13         char str[1024], *s;
14
15         while (1) 
16         {
17                 file = fopen("/proc/buddyinfo", "r");
18                 if (!file)
19                         perror("fopen failed");
20
21                 for (i = 0; i < MAX_ORDER; i++)
22                         buddy[i] = 0;
23
24                 while (fgets(str, sizeof(str), file)) {
25                         for (i = 0; i < sizeof(str); i++)
26                                 if (str[i] == 'z')
27                                         break;
28
29                         for (; i < sizeof(str); i++)
30                                 if (isspace(str[i]))
31                                         break;
32
33                         for (; i < sizeof(str); i++)
34                                 if (!isspace(str[i]))
35                                         break;
36
37                         for (; i < sizeof(str); i++)
38                                 if (isspace(str[i]))
39                                         break;
40
41                         s = &str[i];
42
43                         i = sscanf(s, " %lld %lld %lld %lld"
44                                    "%lld %lld %lld %lld %lld %lld %lld\n",
45                                    &bud[0], &bud[1], &bud[2], &bud[3], &bud[4],
46                                    &bud[5], &bud[6], &bud[7], &bud[8], &bud[9],
47                                    &bud[10]);
48                         for (i = 0; i < MAX_ORDER; i++)
49                                 buddy[i] += bud[i];
50                 }
51
52                 tot = 0;
53                 for (i = 0; i < MAX_ORDER; i++) {
54                         printf("% 5lld.%02lldM",
55                                 (buddy[i] * (1 << (i + 2))) >> 10,
56                                 (buddy[i] * (1 << (i + 2))) % 1024 * 100 / 1024);
57                         tot += buddy[i] * (1 << (i + 2));
58                 }
59                 printf("% 5lldM\n", tot >> 10);
60                 sleep(1);
61
62                 fclose(file);
63         }
64         return 0;
65 }