Simple Signals – C programming and alarm function

You’re forgetting to set the alarm handler initially. Change the start of main() like:

int main(int argc, char *argv[])
{
   signal(SIGALRM, ALARMhandler);
   ...

Also, the signal handler will probably print nothing. That’s because the C library caches output until it sees an end of line. So:

void  ALARMhandler(int sig)
{
  signal(SIGALRM, SIG_IGN);          /* ignore this signal       */
  printf("Hello\n");
  signal(SIGALRM, ALARMhandler);     /* reinstall the handler    */
}

For a real-world program, printing from a signal handler is not very safe. A signal handler should do as little as it can, preferably only setting a flag here or there. And the flag should be declared volatile.

Leave a Comment