sigsuspend -- Replace Signal Mask and Suspend Execution

SYNOPSIS

 #include <lcsignal.h>

 int sigsuspend(const sigset_t *set);
 

DESCRIPTION

sigsuspend replaces the signal mask for a program with the set of signals addressed by set and suspends program execution until an unblocked signal is received. If there is no handler defined for that signal, the default signal action (usually abnormal termination) is performed. Otherwise, the signal mask in effect when sigsuspend was called is restored before the handler is called.

The most common use of this function is to unblock all signals while program execution is suspended. For example, the following code suspends execution until any signal occurs and then restores the previous mask to block whatever signals were blocked before sigsuspend was called

 sigemptyset(&mask);
 sigsuspend(&mask);
 

Because sigsuspend restores the previous mask when a signal is discovered, you can use this function to handle a single occurrence of a signal, even if several signals are pending.

RETURN VALUE

sigsuspend never returns unless interrupted by a signal. If sigsuspend returns, it returns - 1.

EXAMPLE

  #define _SASC_POSIX_SOURCE 1

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

  volatile int shutdown = 0;
  struct sigaction int_action;
  sigset_t blocked_set, empty_set;

  int_action.sa_handler = &int_handler;
  sigemptyset(&int_action.sa_mask);
  int_action.flags = 0;
  sigaction(SIGINT, &int_action, NULL);
  sigemptyset(&blocked_set);
  sigaddset(&blocked_set, SIGINT);
  sigprocmask(&blocked_set);
  sigemptyset(&empty_set);

     /* Wait for and handle interrupts one at a time. It  */
     /*  is assumed that the SIGINT handler sets shutdown */
     /*  to nonzero to cause program termination.         */
  while(!shutdown)
     sigsuspend(&empty_set);

 

RELATED FUNCTIONS

ecbsuspend, sleep

SEE ALSO


Copyright (c) 1998 SAS Institute Inc. Cary, NC, USA. All rights reserved.