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 }