]> git.itanic.dy.fi Git - buddywatch/blobdiff - buddywatch.c
Close file earlier
[buddywatch] / buddywatch.c
index 2a207d377684de3f633f84f1b109b5362712f815..d08f55a41af8346f46c64c340531ab70b496daac 100644 (file)
@@ -2,6 +2,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <ctype.h>
+#include <time.h>
 
 #define MAX_ORDER 11
 
@@ -9,8 +10,18 @@ int main(int argc, char *argv[])
 {
        long long int buddy[MAX_ORDER], bud[MAX_ORDER], tot;
        long int i;
+       double delay = 1;
        FILE *file;
        char str[1024], *s;
+       int ret = 0;
+       struct timespec sleep;
+
+       if (argc > 1)
+               ret = sscanf(argv[1], "%lf", &delay);
+
+       sleep.tv_sec = (time_t)delay;
+       sleep.tv_nsec = ((long)(delay * 1000 * 1000 * 1000) %
+                       (1000l * 1000l * 1000l));
 
        while (1) 
        {
@@ -48,18 +59,43 @@ int main(int argc, char *argv[])
                        for (i = 0; i < MAX_ORDER; i++)
                                buddy[i] += bud[i];
                }
+               fclose(file);
 
                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);
+               for (i = 0; i < MAX_ORDER; i++)
                        tot += buddy[i] * (1 << (i + 2));
-               }
-               printf("% 5lldM\n", tot >> 10);
-               sleep(1);
 
-               fclose(file);
+#define BUDDY_TO_MB(i)                                 \
+               ((buddy[i] * (1 << ((i) + 2))) >> 10)
+#define BUDDY_TO_MB_REM(i, rem)                                                \
+               ((buddy[i] * (1 << (i + 2))) % 1024 * rem / 1024)
+
+               printf("% 5lld.%03lldM"
+                       "% 5lld.%03lldM"
+                       "% 5lld.%03lldM"
+                       "% 5lld.%03lldM"
+                       "% 5lld.%03lldM"
+                       "% 5lld.%03lldM"
+                       "% 5lld.%02lldM"
+                       "% 5lld.%01lldM"
+                       "% 5lldM"
+                       "% 5lldM"
+                       "% 5lldM"
+                       "% 5lldM\n",
+                       BUDDY_TO_MB(0), BUDDY_TO_MB_REM(0, 1000),
+                       BUDDY_TO_MB(1), BUDDY_TO_MB_REM(1, 1000),
+                       BUDDY_TO_MB(2), BUDDY_TO_MB_REM(2, 1000),
+                       BUDDY_TO_MB(3), BUDDY_TO_MB_REM(3, 1000),
+                       BUDDY_TO_MB(4), BUDDY_TO_MB_REM(4, 1000),
+                       BUDDY_TO_MB(5), BUDDY_TO_MB_REM(5, 1000),
+                       BUDDY_TO_MB(6), BUDDY_TO_MB_REM(6, 100),
+                       BUDDY_TO_MB(7), BUDDY_TO_MB_REM(7, 10),
+                       BUDDY_TO_MB(8),
+                       BUDDY_TO_MB(9),
+                       BUDDY_TO_MB(10),
+                       tot >> 10);
+
+               nanosleep(&sleep, NULL);
        }
        return 0;
 }