#define _XOPEN_SOURCE 500 /* SUSv2 */ #include /* sigaction() */ #include /* setitimer() */ #include /* assert() */ #include /* pause() */ static volatile sig_atomic_t flag; static void ring(int sig) { flag = !flag; } int main(void) { struct sigaction act; int tmp; struct itimerval itmv; act.sa_handler = ˚ tmp = sigemptyset(&act.sa_mask); assert(0 == tmp); act.sa_flags = 0; tmp = sigaction(SIGALRM, &act, 0); assert(0 == tmp); itmv.it_value.tv_sec = itmv.it_interval.tv_sec = 0; itmv.it_value.tv_usec = itmv.it_interval.tv_usec = 100 * 1000; tmp = setitimer(ITIMER_REAL, &itmv, 0); assert(0 == tmp); for (;;) { while (0 == flag) ; (void)pause(); } }