free.c revision 40b20421e42cce9834d13ab52ac58efd78838ede
1/* free.c - Display amount of free and used memory in the system.
2 *
3 * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com>
4
5USE_FREE(NEWTOY(free, "tgmkb[!tgmkb]", TOYFLAG_USR|TOYFLAG_BIN))
6
7config 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
21GLOBALS(
22  unsigned bits;
23  unsigned long long units;
24)
25
26static unsigned long long convert(unsigned long d)
27{
28  return (d*TT.units)>>TT.bits;
29}
30
31void 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