17aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley/* free.c - Display amount of free and used memory in the system. 2cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer * 3cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com> 4cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer 59e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley// Flag order is signifcant: b-t are units in order, FLAG_h-1 is unit mask 69e563e1c6c053ad848a15c30efbbe8a079154fb4Rob LandleyUSE_FREE(NEWTOY(free, "htgmkb[!htgmkb]", TOYFLAG_USR|TOYFLAG_BIN)) 7cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer 8cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwerconfig FREE 97aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley bool "free" 107aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley default y 117aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley help 1240b20421e42cce9834d13ab52ac58efd78838edeRob Landley usage: free [-bkmgt] 13cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer 1440b20421e42cce9834d13ab52ac58efd78838edeRob Landley Display the total, free and used amount of physical memory and swap space. 159317c06e2d2081feb37ab36e626707f3a1205576Rob Landley 1640b20421e42cce9834d13ab52ac58efd78838edeRob Landley -bkmgt Output units (default is bytes) 179e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley -h Human readable 18cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer*/ 19cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer 20c0e56edaf256adb6c60c5a052525a1ffbb927901Rob Landley#define FOR_free 21cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer#include "toys.h" 22cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer 2340b20421e42cce9834d13ab52ac58efd78838edeRob LandleyGLOBALS( 2440b20421e42cce9834d13ab52ac58efd78838edeRob Landley unsigned bits; 2540b20421e42cce9834d13ab52ac58efd78838edeRob Landley unsigned long long units; 269e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley char *buf; 2740b20421e42cce9834d13ab52ac58efd78838edeRob Landley) 2840b20421e42cce9834d13ab52ac58efd78838edeRob Landley 299e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landleystatic char *convert(unsigned long d) 30cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer{ 319e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley long long ll = d*TT.units; 329e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley char *s = TT.buf; 339e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley 349e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley if (toys.optflags & FLAG_h) human_readable(s, ll, 0); 359e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley else sprintf(s, "%llu",ll>>TT.bits); 369e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley TT.buf += strlen(TT.buf)+1; 379e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley 389e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley return s; 39cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer} 40cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer 41cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwervoid free_main(void) 42cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer{ 4340b20421e42cce9834d13ab52ac58efd78838edeRob Landley struct sysinfo in; 4440b20421e42cce9834d13ab52ac58efd78838edeRob Landley 4540b20421e42cce9834d13ab52ac58efd78838edeRob Landley sysinfo(&in); 4640b20421e42cce9834d13ab52ac58efd78838edeRob Landley TT.units = in.mem_unit ? in.mem_unit : 1; 479e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley while ((toys.optflags&(FLAG_h-1)) && !(toys.optflags&(1<<TT.bits))) TT.bits++; 4840b20421e42cce9834d13ab52ac58efd78838edeRob Landley TT.bits *= 10; 499e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley TT.buf = toybuf; 5040b20421e42cce9834d13ab52ac58efd78838edeRob Landley 5140b20421e42cce9834d13ab52ac58efd78838edeRob Landley xprintf("\t\ttotal used free shared buffers\n" 529e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley "Mem:%17s%12s%12s%12s%12s\n-/+ buffers/cache:%15s%12s\n" 539e563e1c6c053ad848a15c30efbbe8a079154fb4Rob Landley "Swap:%16s%12s%12s\n", convert(in.totalram), 5440b20421e42cce9834d13ab52ac58efd78838edeRob Landley convert(in.totalram-in.freeram), convert(in.freeram), convert(in.sharedram), 5540b20421e42cce9834d13ab52ac58efd78838edeRob Landley convert(in.bufferram), convert(in.totalram - in.freeram - in.bufferram), 5640b20421e42cce9834d13ab52ac58efd78838edeRob Landley convert(in.freeram + in.bufferram), convert(in.totalswap), 5740b20421e42cce9834d13ab52ac58efd78838edeRob Landley convert(in.totalswap - in.freeswap), convert(in.freeswap)); 58cd9ca5f547010214c046a3d2556251c34bbc8c76Elie De Brauwer} 59