So far, we've seen just about all there is to see with timers, except for one small thing. We've been delivering messages (via a pulse), but you can also deliver POSIX signals. Let's see how this is done:
timer_create (CLOCK_REALTIME, NULL, &timerid);
This is the simplest way to create a timer that sends you a signal. This method raises SIGALRM when the timer fires. If we had actually supplied a struct sigevent, we could specify which signal we actually want to get:
struct sigevent event; SIGEV_SIGNAL_INIT (&event, SIGUSR1); timer_create (CLOCK_REALTIME, &event, &timerid);
This hits us with SIGUSR1 instead of SIGALRM.
You catch timer signals with normal signal handlers; there's nothing special about them.