4.3 Program Example

Example 4-1 shows how the signal, alarm, and pause functions operate. It also shows how to establish a signal handler to catch a signal, thereby preventing program termination.

Example 4-1 Suspending and Resuming Programs

/*  This program shows how to alternately suspend and resume a   *
 *  program using the signal, alarm, and pause functions. It     *
 *  compiles in /STANDARD=VAXC or /STANDARD=RELAXED_ANSI89 mode. */

#define SECONDS 5

#include <stdio.h>
#include <signal.h>

int number_of_alarms = 5;           /*  Set alarm counter.            */

void alarm_action(int);

main()
{
   signal(SIGALRM, alarm_action);   /*  Establish a signal handler.   *
                                     *  to catch the SIGALRM signal.  */

   alarm(SECONDS);                  /* Set alarm clock for 5 seconds. */

   pause();                         /*  Suspend the process until     *
                                     *  the signal is received.       */
}

void alarm_action(int x)

{
   printf("\t<%d\007>", number_of_alarms);  /*  Print the value of    *
                                             *  the alarm counter.    */

   signal(SIGALRM, alarm_action);       /*  Reset the signal.         */

   alarm(SECONDS);                      /*  Set the alarm clock.      */

   if (--number_of_alarms)              /*  Decrement alarm counter.  */
      pause();
}

Here is the sample output from Example 4-1:

$ RUN  EXAMPLE
       <5>   <4>   <3>   <2>   <1>


Previous Page | Next Page | Table of Contents | Index