summaryrefslogtreecommitdiff
path: root/bin/free
diff options
context:
space:
mode:
Diffstat (limited to 'bin/free')
-rw-r--r--bin/free/Kbuild4
-rwxr-xr-xbin/free/freebin0 -> 52936 bytes
-rw-r--r--bin/free/free.c64
3 files changed, 68 insertions, 0 deletions
diff --git a/bin/free/Kbuild b/bin/free/Kbuild
new file mode 100644
index 00000000..08613953
--- /dev/null
+++ b/bin/free/Kbuild
@@ -0,0 +1,4 @@
+bin-y := free
+obj-y += free.o
+libs-y += $(srctree)/lib/libc/libc.a
+
diff --git a/bin/free/free b/bin/free/free
new file mode 100755
index 00000000..31c93e2f
--- /dev/null
+++ b/bin/free/free
Binary files differ
diff --git a/bin/free/free.c b/bin/free/free.c
new file mode 100644
index 00000000..b42ad99a
--- /dev/null
+++ b/bin/free/free.c
@@ -0,0 +1,64 @@
+#include <stdio.h>
+#include <sys/sysinfo.h>
+#include <unistd.h>
+
+int main(int argc, char **argv)
+{
+ int opt;
+ struct sysinfo info;
+ unsigned int shift;
+
+ while ((opt = getopt(argc, argv, "hmtbs")) != -1) {
+ switch (opt) {
+ case 'b': /* bytes */
+ shift = 0;
+ break;
+ case 'k': /* kibibytes */
+ shift = 10;
+ break;
+ case 'm': /* mebibytes */
+ shift = 20;
+ break;
+ case 'g': /* gibibytes */
+ shift = 30;
+ break;
+ default:
+ goto usage;
+ }
+ }
+
+ if (sysinfo(&info) < 0)
+ perror("sysinfo");
+
+ printf(" %13s%13s%13s%13s%13s\n", "total", "used", "free", "shared",
+ "buffers");
+
+ printf("Mem: %13llu%13llu%13llu%13llu%13llu\n",
+ (unsigned long long)((info.totalram * info.mem_unit) >> shift),
+ (unsigned long long)(((info.totalram - info.freeram) *
+ info.mem_unit) >>
+ shift),
+ (unsigned long long)((info.freeram * info.mem_unit) >> shift),
+ (unsigned long long)((info.sharedram * info.mem_unit) >> shift),
+ (unsigned long long)((info.bufferram * info.mem_unit) >> shift));
+
+ printf("-/+ buffers/cache:%13llu%13llu\n",
+ (unsigned long long)(((info.totalram - info.freeram -
+ info.bufferram) *
+ info.mem_unit) >>
+ shift),
+ (unsigned long long)(((info.freeram + info.bufferram) *
+ info.mem_unit) >>
+ shift));
+ printf("Swap:%13llu%13llu%13llu\n",
+ (unsigned long long)((info.totalswap * info.mem_unit) >> shift),
+ (unsigned long long)(((info.totalswap - info.freeswap) *
+ info.mem_unit) >>
+ shift),
+ (unsigned long long)((info.freeswap * info.mem_unit) >> shift));
+
+ return 0;
+usage:
+ write(STDOUT_FILENO, "usage: free [-hmtbs]\n", 21);
+ return 0;
+}