add ram and disk getters
This commit is contained in:
@@ -1,12 +1,30 @@
|
|||||||
#ifndef LINUXSMARTIE_SYS_H
|
#ifndef LINUXSMARTIE_SYS_H
|
||||||
#define LINUXSMARTIE_SYS_H
|
#define LINUXSMARTIE_SYS_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
struct time_date_t {
|
struct time_date_t {
|
||||||
char date[12];
|
char date[12];
|
||||||
char time[9];
|
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_time(struct time_date_t *td);
|
||||||
|
|
||||||
void sys_get_load_avg(double *load_avg);
|
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
|
#endif //LINUXSMARTIE_SYS_H
|
||||||
27
src/sys.c
27
src/sys.c
@@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <sys/statvfs.h>
|
||||||
|
|
||||||
void sys_get_time(struct time_date_t *td) {
|
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"};
|
constexpr char months[][4] = {"sty", "lut", "mar", "kwi", "maj", "cze", "lip", "sie", "wrz", "paz", "lis", "gru"};
|
||||||
@@ -16,3 +18,28 @@ void sys_get_time(struct time_date_t *td) {
|
|||||||
void sys_get_load_avg(double *load_avg) {
|
void sys_get_load_avg(double *load_avg) {
|
||||||
getloadavg(load_avg, 3);
|
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