Home | History | Annotate | Download | only in other
      1 /* free.c - Display amount of free and used memory in the system.
      2  *
      3  * Copyright 2012 Elie De Brauwer <eliedebrauwer (at) gmail.com>
      4 
      5 USE_FREE(NEWTOY(free, "tgmkb[!tgmkb]", TOYFLAG_USR|TOYFLAG_BIN))
      6 
      7 config FREE
      8   bool "free"
      9   default y
     10   help
     11     usage: free [-bkmgt]
     12 
     13     Display the total, free and used amount of physical memory and swap space.
     14 
     15     -bkmgt	Output units (default is bytes)
     16 */
     17 
     18 #define FOR_free
     19 #include "toys.h"
     20 
     21 GLOBALS(
     22   unsigned bits;
     23   unsigned long long units;
     24 )
     25 
     26 static unsigned long long convert(unsigned long d)
     27 {
     28   return (d*TT.units)>>TT.bits;
     29 }
     30 
     31 void free_main(void)
     32 {
     33   struct sysinfo in;
     34 
     35   sysinfo(&in);
     36   TT.units = in.mem_unit ? in.mem_unit : 1;
     37   for (TT.bits = 0; toys.optflags && !(toys.optflags&(1<<TT.bits)); TT.bits++);
     38   TT.bits *= 10;
     39 
     40   xprintf("\t\ttotal        used        free      shared     buffers\n"
     41     "Mem:%17llu%12llu%12llu%12llu%12llu\n-/+ buffers/cache:%15llu%12llu\n"
     42     "Swap:%16llu%12llu%12llu\n", convert(in.totalram),
     43     convert(in.totalram-in.freeram), convert(in.freeram), convert(in.sharedram),
     44     convert(in.bufferram), convert(in.totalram - in.freeram - in.bufferram),
     45     convert(in.freeram + in.bufferram), convert(in.totalswap),
     46     convert(in.totalswap - in.freeswap), convert(in.freeswap));
     47 }
     48