
Untitled
By: a guest on
May 28th, 2012 | syntax:
None | size: 1.70 KB | hits: 12 | expires: Never
#include <stdio.h>
#include <stdlib.h>
void load(int *load0, int *load1){
FILE *stat;
//0 user,1 nice,2 system,3 idle,4 prev idle,5 total,6 prev total,7 prev total - total
int core0[8]={0,0,0,0,0,0,0};
int core1[8]={0,0,0,0,0,0,0};
char dump[10];
char buffer[100];
stat = fopen("/proc/stat", "r");
fgets(buffer, 100, stat);//discard first line
fgets(buffer, 100, stat);
sscanf(buffer, "%s %d %d %d %d", dump, &core0[0], &core0[1], &core0[2], &core0[4]);
fgets(buffer, 100, stat);
sscanf(buffer, "%s %d %d %d %d", dump, &core1[0], &core1[1], &core1[2], &core1[4]);
fclose(stat);
//calculate prev total
core0[6]=core0[0]+core0[1]+core0[2]+core0[4];
core1[6]=core1[0]+core1[1]+core1[2]+core1[4];
//sleep 500ms
usleep(500000);
stat = fopen("/proc/stat", "r");
fgets(buffer, 100, stat);//discard first line
fgets(buffer, 100, stat);
sscanf(buffer, "%s %d %d %d %d", dump, &core0[0], &core0[1], &core0[2], &core0[3]);
fgets(buffer, 100, stat);
sscanf(buffer, "%s %d %d %d %d", dump, &core1[0], &core1[1], &core1[2], &core1[3]);
fclose(stat);
//calculate total
core0[5]=core0[0]+core0[1]+core0[2]+core0[3];
core1[5]=core1[0]+core1[1]+core1[2]+core1[3];
//calculate prev total - total
core0[7]=core0[6]-core0[5];
core1[7]=core1[6]-core1[5];
//100*((prev total - total)-(prev idle - idle))/(prev total - total)
*load0=100*(core0[7]-(core0[4]-core0[3]))/(core0[7]==0?1:core0[7]);
*load1=100*(core1[7]-(core1[4]-core1[3]))/(core1[7]==0?1:core1[7]);
}
int main(void) {
int load0,load1;
while (1) {
load(&load0, &load1);
printf("CPU0 =%i\%\tCPU1 =%i\%\n",load0,load1);
}
return 0;
}