summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/host.c3
-rw-r--r--src/memory.c52
-rw-r--r--src/memory.h6
3 files changed, 60 insertions, 1 deletions
diff --git a/src/host.c b/src/host.c
index f10cc52..ebafe13 100644
--- a/src/host.c
+++ b/src/host.c
@@ -27,7 +27,8 @@ void run_command(const char *command) {
}
void display_host_model() {
-#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__minix)
+#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) || \
+ defined(__DragonFly__) || defined(__minix)
run_command("sysctl -n hw.vendor hw.product");
#elif defined(__sun)
run_command("prtconf -b | awk -F':' '/banner-name/ {printf $2}'");
diff --git a/src/memory.c b/src/memory.c
new file mode 100644
index 0000000..833fa97
--- /dev/null
+++ b/src/memory.c
@@ -0,0 +1,52 @@
+#include "memory.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+long long int run_mem_command(const char *command) {
+ char buf[128];
+ long long int res = 0;
+
+ FILE *p = popen(command, "r");
+ if (!p) {
+ fprintf(stderr, "ホストコマンドを実効に失敗: %s", command);
+ return 0;
+ }
+
+ while (fgets(buf, sizeof(buf), p) != NULL) {
+ buf[strcspn(buf, "\n")] = '\0';
+ }
+
+ res = atoll(buf);
+ pclose(p);
+
+ return res;
+}
+
+void display_memory() {
+ long long int memused = 0;
+ long long int memtotal = 0;
+#if defined(__OpenBSD__)
+ memused = run_mem_command("vmstat | awk 'END {printf $3}' | sed 's/M//'");
+ memtotal = run_mem_command("sysctl -n hw.physmem") / 1024LL / 1024LL;
+#elif defined(__FreeBSD__) || defined(__DragonFly__)
+ memtotal = run_mem_command("sysctl -n hw.physmem") / 1024LL / 1024LL;
+#elif defined(__NetBSD__)
+ memused = run_mem_command("top | grep \"Memory:\" | awk '{print $2}' | "
+ "sed 's/M//'");
+ memtotal = run_mem_command("sysctl -n hw.physmem64") / 1024LL / 1024LL;
+#elif defined(__minix)
+ memtotal = run_mem_command("sysctl -n hw.physmem") / 1024LL / 1024LL;
+#elif defined(__linux__)
+ long long int memaval = run_mem_command("cat /proc/meminfo | grep MemAvailable | "
+ "awk '{print $2}'") / 1024LL;
+ memtotal = run_mem_command("cat /proc/meminfo | grep MemTotal | "
+ "awk '{print $2}'") / 1024LL;
+ memused = memtotal - memaval;
+ /* memused = run_mem_command("cat /proc/meminfo | grep MemFree | "
+ "awk '{print $2}'") / 1024LL; */
+#endif
+
+ printf("%lld MiB / %lld MiB", memused, memtotal);
+}
diff --git a/src/memory.h b/src/memory.h
new file mode 100644
index 0000000..16d89de
--- /dev/null
+++ b/src/memory.h
@@ -0,0 +1,6 @@
+#ifndef MEMORY_H
+#define MEMORY_H
+
+void display_memory();
+
+#endif