sophuwu.site > sysgraph   
              73
            
             #include <iostream>
#include <unistd.h>
#include <cstdlib>
#include "tinydir.h"

void panic(const char* msg){
    // escape sequences
    std::cerr << msg << std::endl;
    exit(1);
}

struct meminfo{
    int total;
    int free;
    int available;
    void get();
    int used(){return total-free;}
    int taken(){return total-available;}
};
void meminfo::get(){
    FILE* file = fopen("/proc/meminfo", "r");
    if(file == NULL) panic("ERROR: Unable to open proc file");
    int line, n = 0;
    while(!feof(file)) {
        char c = fgetc(file);
        if (c > 47 && c < 58)(n*=10)+=c-48;
        else if (c == 10) {
            n/=1000;
            switch(line){
                case 0: total = n;
                case 1: free = n;
                case 2: available = n; break;
            }
            n = 0;
            line++;
        }
    }
    fclose(file);
}

struct cpuinfo{
    int temp;
    int loadavg;
    void get();
    int getloadavg();
};
int cpuinfo::getloadavg() {
    long double a[4], b[4];
    FILE *fp;
    char dump[50];
    fp = fopen("/proc/stat","r");
    fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&a[0],&a[1],&a[2],&a[3]);
    fclose(fp);
    usleep(1000000);
    fp = fopen("/proc/stat","r");
    fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&b[0],&b[1],&b[2],&b[3]);
    fclose(fp);
    return 100 * ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2])) / ((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3]));
}
int cpuinfo::gettemp(){

}
void cpuinfo::get(){
    loadavg = getloadavg();

}


int main(){
    cpuinfo cpu;
    cpu.get();
    printf("CPU load: %d\n", cpu.loadavg);
}