// --- public domain, no warranty. #include // printf() #include // exit() #include // memset() #include // sigaction() #include // setitimer() #define INTERVAL 10000 // usec static int Counter = 0; static void signal_handler(int num) { Counter++; return; } int main(int argc, char *argv[]) { struct sigaction act; struct itimerval itm; memset(&act, 0, sizeof(act)); act.sa_handler = signal_handler; act.sa_flags = SA_RESTART; memset(&itm, 0, sizeof(itm)); itm.it_interval.tv_usec = INTERVAL; itm.it_value.tv_usec = INTERVAL; if (sigaction(SIGALRM, &act, NULL) < 0) { printf("sigaction failed\n"); exit(1); } if (setitimer(ITIMER_REAL, &itm, NULL) < 0) { printf("setitimer failed\n"); exit(1); } while(1) { printf("%d\n", Counter / 100); } return 0; }