#include <lcsignal.h> int sigsuspend(const sigset_t *set);
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.
sigsuspend
never returns unless interrupted by a signal. If
sigsuspend
returns, it returns - 1.
#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);
ecbsuspend
, sleep
Copyright (c) 1998 SAS Institute Inc. Cary, NC, USA. All rights reserved.