Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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;
- }
Advertisement
Add Comment
Please, Sign In to add comment