URI: 
       free.c - ubase - suckless linux base utils
  HTML git clone git://git.suckless.org/ubase
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       free.c (1415B)
       ---
            1 /* See LICENSE file for copyright and license details. */
            2 #include <sys/sysinfo.h>
            3 
            4 #include <stdio.h>
            5 #include <stdlib.h>
            6 
            7 #include "util.h"
            8 
            9 static unsigned int mem_unit = 1;
           10 static unsigned int unit_shift;
           11 
           12 static unsigned long long
           13 scale(unsigned long long v)
           14 {
           15         return (v * mem_unit) >> unit_shift;
           16 }
           17 
           18 static void
           19 usage(void)
           20 {
           21         eprintf("usage: %s [-bkmg]\n", argv0);
           22 }
           23 
           24 int
           25 main(int argc, char *argv[])
           26 {
           27         struct sysinfo info;
           28 
           29         if (sysinfo(&info) < 0)
           30                 eprintf("sysinfo:");
           31         mem_unit = info.mem_unit ? info.mem_unit : 1;
           32 
           33         ARGBEGIN {
           34         case 'b':
           35                 unit_shift = 0;
           36                 break;
           37         case 'k':
           38                 unit_shift = 10;
           39                 break;
           40         case 'm':
           41                 unit_shift = 20;
           42                 break;
           43         case 'g':
           44                 unit_shift = 30;
           45                 break;
           46         default:
           47                 usage();
           48         } ARGEND;
           49 
           50         printf("     %13s%13s%13s%13s%13s\n",
           51                "total",
           52                "used",
           53                "free",
           54                "shared", "buffers");
           55         printf("Mem: ");
           56         printf("%13llu%13llu%13llu%13llu%13llu\n",
           57                scale(info.totalram),
           58                scale(info.totalram - info.freeram),
           59                scale(info.freeram),
           60                scale(info.sharedram),
           61                scale(info.bufferram));
           62         printf("-/+ buffers/cache:");
           63         printf("%13llu%13llu\n",
           64                scale(info.totalram - info.freeram - info.bufferram),
           65                scale(info.freeram + info.bufferram));
           66         printf("Swap:");
           67         printf("%13llu%13llu%13llu\n",
           68                scale(info.totalswap),
           69                scale(info.totalswap - info.freeswap),
           70                scale(info.freeswap));
           71         return 0;
           72 }