/*-------------------------------------------------------------------*/ /* testitimer.c */ /* The setitimer system call. */ /*-------------------------------------------------------------------*/ #include #include #include #include #include /*-------------------------------------------------------------------*/ static void mySignalHandler(int iSignal) /* This function is intended to be a handler for signals of various types. Print iSignal to stdout, and then re-register this function as the handler for signals of type iSignal. */ { void (*pfRet)(int); printf("In mySignalHandler with argument %d\n", iSignal); pfRet = signal(iSignal, mySignalHandler); assert(pfRet != SIG_ERR); } /*-------------------------------------------------------------------*/ int main(int argc, char *argv[]) /* Illustrate the setitimer system call. */ { int iRet; void (*pfRet)(int); struct itimerval sTimerValue; struct itimerval sOldTimerValue; pfRet = signal(SIGPROF, mySignalHandler); assert(pfRet != SIG_ERR); /* Create an interval timer to generate a SIGPROF signal after A seconds and B microseconds of virtual time. Thereafter repeatedly generate a SIGPROF signal at C second, D microsecond intervals of virtual time. */ sTimerValue.it_value.tv_sec = 1; /* A */ sTimerValue.it_value.tv_usec = 0; /* B */ sTimerValue.it_interval.tv_sec = 1; /* C */ sTimerValue.it_interval.tv_usec = 0; /* D */ iRet = setitimer(ITIMER_PROF, &sTimerValue, &sOldTimerValue); assert(iRet != -1); printf("Entering an infinite loop\n"); for (;;) ; return 0; } /* Sample execution: $ gcc -Wall -ansi -pedantic -o testitimer testitimer.c $ testitimer Entering an infinite loop In mySignalHandler with argument 27 In mySignalHandler with argument 27 In mySignalHandler with argument 27 In mySignalHandler with argument 27 In mySignalHandler with argument 27 In mySignalHandler with argument 27 ^C */