Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Examples  

test_signals.c

This file shows how to use the simple signal functions.

#include <stdio.h>
#include <unistd.h>
#include "signals.h"


#define SIG_CATCH 10


int signum;

void handler (int signo)
{
  fprintf (stdout, "\nSIGALRM received");
  fflush (stdout);
  signum++;
  return;
}


int main ()
{
  int num;

  set_signal (SIGALRM);

  fprintf (stdout, "\nWait for signal %d\n", SIGALRM); fflush(stdout);

  if (set_signal_handler(handler) == 1)
  {
    fprintf (stderr, "\nset_signal_handler() failed\n");
    return 1;
  }

  signum = 0;
  num    = 0;

  fprintf (stdout, "\nCatch about %d signals", SIG_CATCH); fflush (stdout);

  while (num < SIG_CATCH)
  {
    sleep (1);

    if (block_all_signal() == 1)
    {
      fprintf (stderr, "\nblock_all_signal() failed\n");
      return 1;
    }

    num = signum;

    if (retore_signal() == 1)
    {
      fprintf (stderr, "\nretore_signal() failed\n");
      return 1;
    }

    if (get_pending_signals() == 1)
    {
      fprintf (stderr, "\nget_pending_signals() failed\n");
      return 1;
    }
  }


  if (block_all_signal() == 1)
  {
    fprintf (stderr, "\nblock_all_signal() failed\n");
    return 1;
  }

  fprintf (stdout, "\nAbout %d signals received, block all signals and sleep 10 seconds.", SIG_CATCH); fflush (stdout);

  sleep (10);

  fprintf (stdout, "\nUnblock all signals."); fflush (stdout);
  fprintf (stdout, "\nLook for suspended signals."); fflush (stdout);

  if (retore_signal() == -1)
  {
    fprintf (stderr, "\nretore_signal() failed\n");
    return 1;
  }

  if (get_pending_signals() == -1)
  {
    fprintf (stderr, "\nget_pending_signals() failed\n");
    return 1;
  }

  while (1)
  {
    if (get_pending_signals() == -1)
    {
      fprintf (stderr, "\nget_pending_signals() failed\n");
      return 1;
    }
  }


  fprintf (stdout, "\nReturn"); fflush (stdout);
  return 0;
}

Generated on Thu Apr 3 16:23:41 2003 for Common_C_libraries by doxygen1.3-rc1