From 4be515392d80c2cbff54478bf76fff52d643b09f Mon Sep 17 00:00:00 2001 From: drath Date: Sat, 9 May 2026 22:36:21 +0200 Subject: [PATCH] add ram and disk getters --- include/sys.h | 18 ++++++++++++++++++ src/sys.c | 27 +++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/include/sys.h b/include/sys.h index 1458a1e..8c317ee 100644 --- a/include/sys.h +++ b/include/sys.h @@ -1,12 +1,30 @@ #ifndef LINUXSMARTIE_SYS_H #define LINUXSMARTIE_SYS_H +#include + struct time_date_t { char date[12]; char time[9]; }; +struct memory_t { + uint64_t free; + uint64_t used; + uint64_t total; +}; + +struct disk_t { + struct memory_t usage; + char mountpoint[256]; +}; + void sys_get_time(struct time_date_t *td); + void sys_get_load_avg(double *load_avg); +void sys_get_ram(struct memory_t *ram); + +void sys_get_disk(struct disk_t* disk); + #endif //LINUXSMARTIE_SYS_H \ No newline at end of file diff --git a/src/sys.c b/src/sys.c index 1cf0042..754f9b2 100644 --- a/src/sys.c +++ b/src/sys.c @@ -2,7 +2,9 @@ #include #include +#include #include +#include void sys_get_time(struct time_date_t *td) { constexpr char months[][4] = {"sty", "lut", "mar", "kwi", "maj", "cze", "lip", "sie", "wrz", "paz", "lis", "gru"}; @@ -15,4 +17,29 @@ void sys_get_time(struct time_date_t *td) { void sys_get_load_avg(double *load_avg) { getloadavg(load_avg, 3); +} + +void sys_get_ram(struct memory_t *ram) { + char buf[64]; + memset(ram, 0, sizeof(struct memory_t)); // zero out all values so we dont break out of the loop early + + FILE *f = fopen("/proc/meminfo", "r"); + if (f == nullptr) + return; + + while (fgets(buf, sizeof(buf), f)) { + sscanf(buf, "MemTotal: %lu kB", &ram->total); // NOLINT we live dangerously + sscanf(buf, "MemAvailable: %lu kB", &ram->free); // NOLINT (its not really that dangerous) + if (ram->total && ram->free) break; + } + fclose(f); + ram->used = ram->total - ram->free; +} + +void sys_get_disk(struct disk_t* disk) { + struct statvfs diskData; + statvfs(disk->mountpoint, &diskData); + disk->usage.free = diskData.f_bfree * diskData.f_frsize; + disk->usage.used = (diskData.f_blocks - diskData.f_bfree) * diskData.f_frsize; + disk->usage.total = diskData.f_blocks * diskData.f_frsize; } \ No newline at end of file