regexghost-dotfiles

My dotfiles and scripts
git clone git@git.regexghost.com/regexghost-dotfiles.git
Log | Files | Refs | README

cpu.c (1754B)


      1 #include <stdio.h>
      2 
      3 #define PREV_FILE_LOC "/tmp/cpu_c_previous"
      4 
      5 typedef struct {
      6 	int total;
      7 	int idle;
      8 } Values;
      9 
     10 Values get_previous_values() {
     11 	FILE *f;
     12 	f = fopen(PREV_FILE_LOC, "r");
     13 	if (f == NULL) {
     14 		Values prev_values;
     15 		prev_values.total = 0;
     16 		prev_values.idle = 0;
     17 		return prev_values;
     18 	}
     19 	char buf[100];
     20 	fgets(buf, 100, f);
     21 	int total, idle;
     22 	sscanf(buf, "%d %d", &total, &idle);
     23 	Values prev_values;
     24 	prev_values.total = total;
     25 	prev_values.idle = idle;
     26 	fclose(f);
     27 	return prev_values;
     28 }
     29 
     30 void save_new_values(Values new_values) {
     31 	FILE *f;
     32 	f = fopen(PREV_FILE_LOC, "w");
     33 	fprintf(f, "%d %d", new_values.total, new_values.idle);
     34 	fclose(f);
     35 }
     36 
     37 int main() {
     38 	Values prev_values = get_previous_values();
     39 	
     40 	FILE *f;
     41 	f = fopen("/proc/stat", "r");
     42 	char buf[100] = {0};
     43 	fgets(buf, 100, f);
     44 	//printf("%s\n", buf);
     45 	fclose(f);
     46 
     47 	int user, nice, system, idle, iowait, irq, softirq, steal;
     48 
     49 	sscanf(buf, "%*s %d %d %d %d %d %d %d %d %*d %*d", &user, &nice, &system, &idle, &iowait, &irq, &softirq, &steal);
     50 	
     51 	//printf("Current: %d %d %d %d %d %d %d %d\n", user, nice, system, idle, iowait, irq, softirq, steal);
     52 	//printf("Old: %d %d\n", prev_values.total, prev_values.idle);
     53 
     54 	int total = user + nice + system + idle + iowait + irq + softirq + steal;
     55 	int total_since_last = total - prev_values.total;
     56 	int idle_since_last = idle - prev_values.idle;
     57 
     58 	double fraction = (double)idle_since_last/(double)total_since_last;
     59 	double usage = 1 - fraction;
     60 	double percentage = usage * 100;
     61 
     62 	//printf("%f %f %f\n", fraction, usage, percentage);
     63 	if (percentage < 9.995) {
     64 		printf("%0.2f%%\n", percentage);
     65 	} else {
     66 		printf("%0.1f%%\n", percentage);
     67 	}
     68 
     69 	prev_values.total = total;
     70 	prev_values.idle = idle;
     71 
     72 	save_new_values(prev_values);
     73 }