#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

FILE *f;
char buf[1024];
char *item, *arg;
unsigned long user0=0, nice0=0, sys0=0, idle0=0, total0=0;
unsigned long user1=0, nice1=0, sys1=0, idle1=0, total1=0;
int dif;


void update(void)
{
	f=fopen("/proc/stat", "r");
	while((fgets(buf, sizeof(buf), f)) != NULL)
	{
		item=strtok(buf, " \t\n");
		if  (strcmp("cpu", item) == 0)
		{
			arg = strtok(NULL, "\n");
			sscanf(arg, "%lu %lu %lu %lu", &user0, &nice0, &sys0, &idle0);
			break;
		}
	}
	fclose(f);
	total0 = user0 + nice0 + sys0 + idle0;
}

int main (int argc, char **argv)
{
	update();
	while(1)
	{
		user1=user0;
		nice1=nice0;
		sys1=sys0;
		idle1=idle0;
		total1=total0;
		usleep(500000); // Affichage toutes les 500 ms
		update();
		dif=(int)total0 - total1;
		printf("user : %lu\t", 100*(user0-user1)/dif);
		printf("nice : %lu\t", 100*(nice0-nice1)/dif);
		printf("sys  : %lu\t", 100*(sys0-sys1)/dif);
		printf("idle : %lu\n", 100*(idle0-idle1)/dif);
	}
	return 0;
}

