| free.c - ubase - suckless linux base utils | |
| git clone git://git.suckless.org/ubase | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| free.c (1415B) | |
| --- | |
| 1 /* See LICENSE file for copyright and license details. */ | |
| 2 #include <sys/sysinfo.h> | |
| 3 | |
| 4 #include <stdio.h> | |
| 5 #include <stdlib.h> | |
| 6 | |
| 7 #include "util.h" | |
| 8 | |
| 9 static unsigned int mem_unit = 1; | |
| 10 static unsigned int unit_shift; | |
| 11 | |
| 12 static unsigned long long | |
| 13 scale(unsigned long long v) | |
| 14 { | |
| 15 return (v * mem_unit) >> unit_shift; | |
| 16 } | |
| 17 | |
| 18 static void | |
| 19 usage(void) | |
| 20 { | |
| 21 eprintf("usage: %s [-bkmg]\n", argv0); | |
| 22 } | |
| 23 | |
| 24 int | |
| 25 main(int argc, char *argv[]) | |
| 26 { | |
| 27 struct sysinfo info; | |
| 28 | |
| 29 if (sysinfo(&info) < 0) | |
| 30 eprintf("sysinfo:"); | |
| 31 mem_unit = info.mem_unit ? info.mem_unit : 1; | |
| 32 | |
| 33 ARGBEGIN { | |
| 34 case 'b': | |
| 35 unit_shift = 0; | |
| 36 break; | |
| 37 case 'k': | |
| 38 unit_shift = 10; | |
| 39 break; | |
| 40 case 'm': | |
| 41 unit_shift = 20; | |
| 42 break; | |
| 43 case 'g': | |
| 44 unit_shift = 30; | |
| 45 break; | |
| 46 default: | |
| 47 usage(); | |
| 48 } ARGEND; | |
| 49 | |
| 50 printf(" %13s%13s%13s%13s%13s\n", | |
| 51 "total", | |
| 52 "used", | |
| 53 "free", | |
| 54 "shared", "buffers"); | |
| 55 printf("Mem: "); | |
| 56 printf("%13llu%13llu%13llu%13llu%13llu\n", | |
| 57 scale(info.totalram), | |
| 58 scale(info.totalram - info.freeram), | |
| 59 scale(info.freeram), | |
| 60 scale(info.sharedram), | |
| 61 scale(info.bufferram)); | |
| 62 printf("-/+ buffers/cache:"); | |
| 63 printf("%13llu%13llu\n", | |
| 64 scale(info.totalram - info.freeram - info.bufferram), | |
| 65 scale(info.freeram + info.bufferram)); | |
| 66 printf("Swap:"); | |
| 67 printf("%13llu%13llu%13llu\n", | |
| 68 scale(info.totalswap), | |
| 69 scale(info.totalswap - info.freeswap), | |
| 70 scale(info.freeswap)); | |
| 71 return 0; | |
| 72 } |