Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 28th, 2012  |  syntax: None  |  size: 1.70 KB  |  hits: 12  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. void load(int *load0, int *load1){
  6.        
  7.         FILE *stat;
  8.        
  9.         //0 user,1 nice,2 system,3 idle,4 prev idle,5 total,6 prev total,7 prev total - total
  10.         int core0[8]={0,0,0,0,0,0,0};  
  11.         int core1[8]={0,0,0,0,0,0,0};  
  12.        
  13.         char dump[10];
  14.         char buffer[100];
  15.        
  16.         stat = fopen("/proc/stat", "r");
  17.         fgets(buffer, 100, stat);//discard first line
  18.         fgets(buffer, 100, stat);
  19.         sscanf(buffer, "%s %d %d %d %d", dump, &core0[0], &core0[1], &core0[2], &core0[4]);
  20.         fgets(buffer, 100, stat);
  21.         sscanf(buffer, "%s %d %d %d %d", dump, &core1[0], &core1[1], &core1[2], &core1[4]);
  22.         fclose(stat);
  23.        
  24.         //calculate prev total
  25.         core0[6]=core0[0]+core0[1]+core0[2]+core0[4];
  26.         core1[6]=core1[0]+core1[1]+core1[2]+core1[4];
  27.  
  28.        
  29.         //sleep 500ms
  30.         usleep(500000);
  31.  
  32.         stat = fopen("/proc/stat", "r");
  33.         fgets(buffer, 100, stat);//discard first line
  34.         fgets(buffer, 100, stat);
  35.         sscanf(buffer, "%s %d %d %d %d", dump, &core0[0], &core0[1], &core0[2], &core0[3]);
  36.         fgets(buffer, 100, stat);
  37.         sscanf(buffer, "%s %d %d %d %d", dump, &core1[0], &core1[1], &core1[2], &core1[3]);
  38.         fclose(stat);
  39.  
  40.         //calculate total
  41.         core0[5]=core0[0]+core0[1]+core0[2]+core0[3];
  42.         core1[5]=core1[0]+core1[1]+core1[2]+core1[3];
  43.  
  44.  
  45.         //calculate prev total - total
  46.         core0[7]=core0[6]-core0[5];
  47.         core1[7]=core1[6]-core1[5];
  48.  
  49.  
  50.         //100*((prev total - total)-(prev idle - idle))/(prev total - total)
  51.         *load0=100*(core0[7]-(core0[4]-core0[3]))/(core0[7]==0?1:core0[7]);
  52.         *load1=100*(core1[7]-(core1[4]-core1[3]))/(core1[7]==0?1:core1[7]);
  53. }
  54.  
  55.  
  56. int main(void) {
  57.        
  58.  
  59.         int load0,load1;
  60.  
  61.         while (1) {
  62.  
  63.            load(&load0, &load1);
  64.            printf("CPU0 =%i\%\tCPU1 =%i\%\n",load0,load1);
  65.         }
  66. return 0;
  67. }