You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.5 KiB
59 lines
1.5 KiB
/* free.c - Display amount of free and used memory in the system.
|
|
*
|
|
* Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com>
|
|
|
|
// Flag order is signifcant: b-t are units in order, FLAG_h-1 is unit mask
|
|
USE_FREE(NEWTOY(free, "htgmkb[!htgmkb]", TOYFLAG_USR|TOYFLAG_BIN))
|
|
|
|
config FREE
|
|
bool "free"
|
|
default y
|
|
help
|
|
usage: free [-bkmgt]
|
|
|
|
Display the total, free and used amount of physical memory and swap space.
|
|
|
|
-bkmgt Output units (default is bytes)
|
|
-h Human readable (K=1024)
|
|
*/
|
|
|
|
#define FOR_free
|
|
#include "toys.h"
|
|
|
|
GLOBALS(
|
|
unsigned bits;
|
|
unsigned long long units;
|
|
char *buf;
|
|
)
|
|
|
|
static char *convert(unsigned long d)
|
|
{
|
|
long long ll = d*TT.units;
|
|
char *s = TT.buf;
|
|
|
|
if (FLAG(h)) human_readable(s, ll, 0);
|
|
else sprintf(s, "%llu",ll>>TT.bits);
|
|
TT.buf += strlen(TT.buf)+1;
|
|
|
|
return s;
|
|
}
|
|
|
|
void free_main(void)
|
|
{
|
|
struct sysinfo in;
|
|
|
|
sysinfo(&in);
|
|
TT.units = in.mem_unit ? in.mem_unit : 1;
|
|
while ((toys.optflags&(FLAG_h-1)) && !(toys.optflags&(1<<TT.bits))) TT.bits++;
|
|
TT.bits *= 10;
|
|
TT.buf = toybuf;
|
|
|
|
xprintf("\t\ttotal used free shared buffers\n"
|
|
"Mem:%17s%12s%12s%12s%12s\n-/+ buffers/cache:%15s%12s\n"
|
|
"Swap:%16s%12s%12s\n", convert(in.totalram),
|
|
convert(in.totalram-in.freeram), convert(in.freeram), convert(in.sharedram),
|
|
convert(in.bufferram), convert(in.totalram - in.freeram - in.bufferram),
|
|
convert(in.freeram + in.bufferram), convert(in.totalswap),
|
|
convert(in.totalswap - in.freeswap), convert(in.freeswap));
|
|
}
|