/* See LICENSE file for copyright and license details. */ #include #include #include #include "util.h" static unsigned int mem_unit = 1; static unsigned int unit_shift; static unsigned long long scale(unsigned long long v) { return (v * mem_unit) >> unit_shift; } static void usage(void) { eprintf("usage: %s [-bkmg]\n", argv0); } int main(int argc, char *argv[]) { struct sysinfo info; if (sysinfo(&info) < 0) eprintf("sysinfo:"); mem_unit = info.mem_unit ? info.mem_unit : 1; ARGBEGIN { case 'b': unit_shift = 0; break; case 'k': unit_shift = 10; break; case 'm': unit_shift = 20; break; case 'g': unit_shift = 30; break; default: usage(); } ARGEND; printf(" %13s%13s%13s%13s%13s\n", "total", "used", "free", "shared", "buffers"); printf("Mem: "); printf("%13llu%13llu%13llu%13llu%13llu\n", scale(info.totalram), scale(info.totalram - info.freeram), scale(info.freeram), scale(info.sharedram), scale(info.bufferram)); printf("-/+ buffers/cache:"); printf("%13llu%13llu\n", scale(info.totalram - info.freeram - info.bufferram), scale(info.freeram + info.bufferram)); printf("Swap:"); printf("%13llu%13llu%13llu\n", scale(info.totalswap), scale(info.totalswap - info.freeswap), scale(info.freeswap)); return 0; }