9 int main(int argc, char *argv[])
11 long long int buddy[MAX_ORDER], bud[MAX_ORDER], tot;
17 struct timespec sleep;
20 ret = sscanf(argv[1], "%lf", &delay);
22 sleep.tv_sec = (time_t)delay;
23 sleep.tv_nsec = ((long)(delay * 1000 * 1000 * 1000) %
24 (1000l * 1000l * 1000l));
28 file = fopen("/proc/buddyinfo", "r");
30 perror("fopen failed");
32 for (i = 0; i < MAX_ORDER; i++)
35 while (fgets(str, sizeof(str), file)) {
36 for (i = 0; i < sizeof(str); i++)
40 for (; i < sizeof(str); i++)
44 for (; i < sizeof(str); i++)
48 for (; i < sizeof(str); i++)
54 i = sscanf(s, " %lld %lld %lld %lld"
55 "%lld %lld %lld %lld %lld %lld %lld\n",
56 &bud[0], &bud[1], &bud[2], &bud[3], &bud[4],
57 &bud[5], &bud[6], &bud[7], &bud[8], &bud[9],
59 for (i = 0; i < MAX_ORDER; i++)
65 for (i = 0; i < MAX_ORDER; i++)
66 tot += buddy[i] * (1 << (i + 2));
68 #define BUDDY_TO_MB(i) \
69 ((buddy[i] * (1 << ((i) + 2))) >> 10)
70 #define BUDDY_TO_MB_REM(i, rem) \
71 ((buddy[i] * (1 << (i + 2))) % 1024 * rem / 1024)
73 printf("% 5lld.%03lldM"
85 BUDDY_TO_MB(0), BUDDY_TO_MB_REM(0, 1000),
86 BUDDY_TO_MB(1), BUDDY_TO_MB_REM(1, 1000),
87 BUDDY_TO_MB(2), BUDDY_TO_MB_REM(2, 1000),
88 BUDDY_TO_MB(3), BUDDY_TO_MB_REM(3, 1000),
89 BUDDY_TO_MB(4), BUDDY_TO_MB_REM(4, 1000),
90 BUDDY_TO_MB(5), BUDDY_TO_MB_REM(5, 1000),
91 BUDDY_TO_MB(6), BUDDY_TO_MB_REM(6, 100),
92 BUDDY_TO_MB(7), BUDDY_TO_MB_REM(7, 10),
98 nanosleep(&sleep, NULL);