free.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /* free.c - Display amount of free and used memory in the system.
  2. *
  3. * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com>
  4. // Flag order is signifcant: b-g are units in order, FLAG_h-1 is unit mask
  5. USE_FREE(NEWTOY(free, "hgmkb[!hgmkb]", TOYFLAG_USR|TOYFLAG_BIN))
  6. config FREE
  7. bool "free"
  8. default y
  9. help
  10. usage: free [-bkmgt]
  11. Display the total, free and used amount of physical memory and swap space.
  12. -bkmg Output units (default is bytes)
  13. -h Human readable (K=1024)
  14. */
  15. #define FOR_free
  16. #include "toys.h"
  17. GLOBALS(
  18. unsigned bits;
  19. unsigned long long units;
  20. char *buf;
  21. )
  22. static char *convert(unsigned long d)
  23. {
  24. long long ll = d*TT.units;
  25. char *s = TT.buf;
  26. if (FLAG(h)) human_readable(s, ll, 0);
  27. else sprintf(s, "%llu",ll>>TT.bits);
  28. TT.buf += strlen(TT.buf)+1;
  29. return s;
  30. }
  31. void free_main(void)
  32. {
  33. struct sysinfo in;
  34. sysinfo(&in);
  35. TT.units = in.mem_unit ? in.mem_unit : 1;
  36. while ((toys.optflags&(FLAG_h-1)) && !(toys.optflags&(1<<TT.bits))) TT.bits++;
  37. TT.bits *= 10;
  38. TT.buf = toybuf;
  39. xprintf("\t\ttotal used free shared buffers\n"
  40. "Mem:%17s%12s%12s%12s%12s\n-/+ buffers/cache:%15s%12s\n"
  41. "Swap:%16s%12s%12s\n", convert(in.totalram),
  42. convert(in.totalram-in.freeram), convert(in.freeram), convert(in.sharedram),
  43. convert(in.bufferram), convert(in.totalram - in.freeram - in.bufferram),
  44. convert(in.freeram + in.bufferram), convert(in.totalswap),
  45. convert(in.totalswap - in.freeswap), convert(in.freeswap));
  46. }