add ram and disk getters
This commit is contained in:
27
src/sys.c
27
src/sys.c
@@ -2,7 +2,9 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <sys/statvfs.h>
|
||||
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user