1*53ee8cc1Swenshuai.xi /* Copyright (C) 1991-2003, 2004, 2007 Free Software Foundation, Inc. 2*53ee8cc1Swenshuai.xi This file is part of the GNU C Library. 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi The GNU C Library is free software; you can redistribute it and/or 5*53ee8cc1Swenshuai.xi modify it under the terms of the GNU Lesser General Public 6*53ee8cc1Swenshuai.xi License as published by the Free Software Foundation; either 7*53ee8cc1Swenshuai.xi version 2.1 of the License, or (at your option) any later version. 8*53ee8cc1Swenshuai.xi 9*53ee8cc1Swenshuai.xi The GNU C Library is distributed in the hope that it will be useful, 10*53ee8cc1Swenshuai.xi but WITHOUT ANY WARRANTY; without even the implied warranty of 11*53ee8cc1Swenshuai.xi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12*53ee8cc1Swenshuai.xi Lesser General Public License for more details. 13*53ee8cc1Swenshuai.xi 14*53ee8cc1Swenshuai.xi You should have received a copy of the GNU Lesser General Public 15*53ee8cc1Swenshuai.xi License along with the GNU C Library; if not, write to the Free 16*53ee8cc1Swenshuai.xi Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 17*53ee8cc1Swenshuai.xi 02111-1307 USA. */ 18*53ee8cc1Swenshuai.xi 19*53ee8cc1Swenshuai.xi /* 20*53ee8cc1Swenshuai.xi * ISO C99 Standard: 7.14 Signal handling <signal.h> 21*53ee8cc1Swenshuai.xi */ 22*53ee8cc1Swenshuai.xi 23*53ee8cc1Swenshuai.xi #ifndef _SIGNAL_H 24*53ee8cc1Swenshuai.xi 25*53ee8cc1Swenshuai.xi #if !defined __need_sig_atomic_t && !defined __need_sigset_t 26*53ee8cc1Swenshuai.xi # define _SIGNAL_H 27*53ee8cc1Swenshuai.xi #endif 28*53ee8cc1Swenshuai.xi 29*53ee8cc1Swenshuai.xi #include <features.h> 30*53ee8cc1Swenshuai.xi 31*53ee8cc1Swenshuai.xi __BEGIN_DECLS 32*53ee8cc1Swenshuai.xi 33*53ee8cc1Swenshuai.xi #include <bits/sigset.h> /* __sigset_t, __sig_atomic_t. */ 34*53ee8cc1Swenshuai.xi 35*53ee8cc1Swenshuai.xi /* An integral type that can be modified atomically, without the 36*53ee8cc1Swenshuai.xi possibility of a signal arriving in the middle of the operation. */ 37*53ee8cc1Swenshuai.xi #if defined __need_sig_atomic_t || defined _SIGNAL_H 38*53ee8cc1Swenshuai.xi # ifndef __sig_atomic_t_defined 39*53ee8cc1Swenshuai.xi # define __sig_atomic_t_defined 40*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD 41*53ee8cc1Swenshuai.xi typedef __sig_atomic_t sig_atomic_t; 42*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD 43*53ee8cc1Swenshuai.xi # endif 44*53ee8cc1Swenshuai.xi # undef __need_sig_atomic_t 45*53ee8cc1Swenshuai.xi #endif 46*53ee8cc1Swenshuai.xi 47*53ee8cc1Swenshuai.xi #if defined __need_sigset_t || (defined _SIGNAL_H && defined __USE_POSIX) 48*53ee8cc1Swenshuai.xi # ifndef __sigset_t_defined 49*53ee8cc1Swenshuai.xi # define __sigset_t_defined 50*53ee8cc1Swenshuai.xi typedef __sigset_t sigset_t; 51*53ee8cc1Swenshuai.xi # endif 52*53ee8cc1Swenshuai.xi # undef __need_sigset_t 53*53ee8cc1Swenshuai.xi #endif 54*53ee8cc1Swenshuai.xi 55*53ee8cc1Swenshuai.xi #ifdef _SIGNAL_H 56*53ee8cc1Swenshuai.xi 57*53ee8cc1Swenshuai.xi #include <bits/types.h> 58*53ee8cc1Swenshuai.xi #include <bits/signum.h> 59*53ee8cc1Swenshuai.xi 60*53ee8cc1Swenshuai.xi #if defined __USE_XOPEN || defined __USE_XOPEN2K 61*53ee8cc1Swenshuai.xi # ifndef __pid_t_defined 62*53ee8cc1Swenshuai.xi typedef __pid_t pid_t; 63*53ee8cc1Swenshuai.xi # define __pid_t_defined 64*53ee8cc1Swenshuai.xi #endif 65*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN 66*53ee8cc1Swenshuai.xi # endif 67*53ee8cc1Swenshuai.xi # ifndef __uid_t_defined 68*53ee8cc1Swenshuai.xi typedef __uid_t uid_t; 69*53ee8cc1Swenshuai.xi # define __uid_t_defined 70*53ee8cc1Swenshuai.xi # endif 71*53ee8cc1Swenshuai.xi #endif /* Unix98 */ 72*53ee8cc1Swenshuai.xi 73*53ee8cc1Swenshuai.xi 74*53ee8cc1Swenshuai.xi /* Type of a signal handler. */ 75*53ee8cc1Swenshuai.xi typedef void (*__sighandler_t) (int); 76*53ee8cc1Swenshuai.xi 77*53ee8cc1Swenshuai.xi /* The X/Open definition of `signal' specifies the SVID semantic. Use 78*53ee8cc1Swenshuai.xi the additional function `sysv_signal' when X/Open compatibility is 79*53ee8cc1Swenshuai.xi requested. */ 80*53ee8cc1Swenshuai.xi extern __sighandler_t __sysv_signal (int __sig, __sighandler_t __handler) 81*53ee8cc1Swenshuai.xi __THROW; 82*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 83*53ee8cc1Swenshuai.xi extern __sighandler_t sysv_signal (int __sig, __sighandler_t __handler) 84*53ee8cc1Swenshuai.xi __THROW; 85*53ee8cc1Swenshuai.xi #endif 86*53ee8cc1Swenshuai.xi 87*53ee8cc1Swenshuai.xi /* Set the handler for the signal SIG to HANDLER, returning the old 88*53ee8cc1Swenshuai.xi handler, or SIG_ERR on error. 89*53ee8cc1Swenshuai.xi By default `signal' has the BSD semantic. */ 90*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD 91*53ee8cc1Swenshuai.xi #ifdef __USE_BSD 92*53ee8cc1Swenshuai.xi extern __sighandler_t signal (int __sig, __sighandler_t __handler) 93*53ee8cc1Swenshuai.xi __THROW; 94*53ee8cc1Swenshuai.xi #else 95*53ee8cc1Swenshuai.xi /* Make sure the used `signal' implementation is the SVID version. */ 96*53ee8cc1Swenshuai.xi # ifdef __REDIRECT_NTH 97*53ee8cc1Swenshuai.xi extern __sighandler_t __REDIRECT_NTH (signal, 98*53ee8cc1Swenshuai.xi (int __sig, __sighandler_t __handler), 99*53ee8cc1Swenshuai.xi __sysv_signal); 100*53ee8cc1Swenshuai.xi # else 101*53ee8cc1Swenshuai.xi # define signal __sysv_signal 102*53ee8cc1Swenshuai.xi # endif 103*53ee8cc1Swenshuai.xi #endif 104*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD 105*53ee8cc1Swenshuai.xi 106*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN 107*53ee8cc1Swenshuai.xi /* The X/Open definition of `signal' conflicts with the BSD version. 108*53ee8cc1Swenshuai.xi So they defined another function `bsd_signal'. */ 109*53ee8cc1Swenshuai.xi extern __sighandler_t bsd_signal (int __sig, __sighandler_t __handler) 110*53ee8cc1Swenshuai.xi __THROW; 111*53ee8cc1Swenshuai.xi #endif 112*53ee8cc1Swenshuai.xi 113*53ee8cc1Swenshuai.xi /* Send signal SIG to process number PID. If PID is zero, 114*53ee8cc1Swenshuai.xi send SIG to all processes in the current process's process group. 115*53ee8cc1Swenshuai.xi If PID is < -1, send SIG to all processes in process group - PID. */ 116*53ee8cc1Swenshuai.xi #ifdef __USE_POSIX 117*53ee8cc1Swenshuai.xi extern int kill (__pid_t __pid, int __sig) __THROW; 118*53ee8cc1Swenshuai.xi #endif /* Use POSIX. */ 119*53ee8cc1Swenshuai.xi 120*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED 121*53ee8cc1Swenshuai.xi /* Send SIG to all processes in process group PGRP. 122*53ee8cc1Swenshuai.xi If PGRP is zero, send SIG to all processes in 123*53ee8cc1Swenshuai.xi the current process's process group. */ 124*53ee8cc1Swenshuai.xi extern int killpg (__pid_t __pgrp, int __sig) __THROW; 125*53ee8cc1Swenshuai.xi #endif /* Use BSD || X/Open Unix. */ 126*53ee8cc1Swenshuai.xi 127*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD 128*53ee8cc1Swenshuai.xi /* Raise signal SIG, i.e., send SIG to yourself. */ 129*53ee8cc1Swenshuai.xi extern int raise (int __sig) __THROW; 130*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD 131*53ee8cc1Swenshuai.xi 132*53ee8cc1Swenshuai.xi #ifdef __USE_SVID 133*53ee8cc1Swenshuai.xi /* SVID names for the same things. */ 134*53ee8cc1Swenshuai.xi extern __sighandler_t ssignal (int __sig, __sighandler_t __handler) 135*53ee8cc1Swenshuai.xi __THROW; 136*53ee8cc1Swenshuai.xi extern int gsignal (int __sig) __THROW; 137*53ee8cc1Swenshuai.xi #endif /* Use SVID. */ 138*53ee8cc1Swenshuai.xi 139*53ee8cc1Swenshuai.xi #ifdef __USE_MISC 140*53ee8cc1Swenshuai.xi /* Print a message describing the meaning of the given signal number. */ 141*53ee8cc1Swenshuai.xi extern void psignal (int __sig, __const char *__s); 142*53ee8cc1Swenshuai.xi #endif /* Use misc. */ 143*53ee8cc1Swenshuai.xi 144*53ee8cc1Swenshuai.xi 145*53ee8cc1Swenshuai.xi /* The `sigpause' function has two different interfaces. The original 146*53ee8cc1Swenshuai.xi BSD definition defines the argument as a mask of the signal, while 147*53ee8cc1Swenshuai.xi the more modern interface in X/Open defines it as the signal 148*53ee8cc1Swenshuai.xi number. We go with the BSD version unless the user explicitly 149*53ee8cc1Swenshuai.xi selects the X/Open version. 150*53ee8cc1Swenshuai.xi 151*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 152*53ee8cc1Swenshuai.xi __THROW. */ 153*53ee8cc1Swenshuai.xi extern int __sigpause (int __sig_or_mask, int __is_sig); 154*53ee8cc1Swenshuai.xi 155*53ee8cc1Swenshuai.xi #ifdef __FAVOR_BSD 156*53ee8cc1Swenshuai.xi /* Set the mask of blocked signals to MASK, 157*53ee8cc1Swenshuai.xi wait for a signal to arrive, and then restore the mask. */ 158*53ee8cc1Swenshuai.xi extern int sigpause (int __mask) __THROW __attribute_deprecated__; 159*53ee8cc1Swenshuai.xi #else 160*53ee8cc1Swenshuai.xi # ifdef __USE_XOPEN 161*53ee8cc1Swenshuai.xi # ifdef __GNUC__ 162*53ee8cc1Swenshuai.xi extern int sigpause (int __sig) __asm__ ("__xpg_sigpause"); 163*53ee8cc1Swenshuai.xi # else 164*53ee8cc1Swenshuai.xi /* Remove a signal from the signal mask and suspend the process. */ 165*53ee8cc1Swenshuai.xi # define sigpause(sig) __sigpause ((sig), 1) 166*53ee8cc1Swenshuai.xi # endif 167*53ee8cc1Swenshuai.xi # endif 168*53ee8cc1Swenshuai.xi #endif 169*53ee8cc1Swenshuai.xi 170*53ee8cc1Swenshuai.xi 171*53ee8cc1Swenshuai.xi #ifdef __USE_BSD 172*53ee8cc1Swenshuai.xi /* None of the following functions should be used anymore. They are here 173*53ee8cc1Swenshuai.xi only for compatibility. A single word (`int') is not guaranteed to be 174*53ee8cc1Swenshuai.xi enough to hold a complete signal mask and therefore these functions 175*53ee8cc1Swenshuai.xi simply do not work in many situations. Use `sigprocmask' instead. */ 176*53ee8cc1Swenshuai.xi 177*53ee8cc1Swenshuai.xi /* Compute mask for signal SIG. */ 178*53ee8cc1Swenshuai.xi # define sigmask(sig) __sigmask(sig) 179*53ee8cc1Swenshuai.xi 180*53ee8cc1Swenshuai.xi /* Block signals in MASK, returning the old mask. */ 181*53ee8cc1Swenshuai.xi extern int sigblock (int __mask) __THROW __attribute_deprecated__; 182*53ee8cc1Swenshuai.xi 183*53ee8cc1Swenshuai.xi /* Set the mask of blocked signals to MASK, returning the old mask. */ 184*53ee8cc1Swenshuai.xi extern int sigsetmask (int __mask) __THROW __attribute_deprecated__; 185*53ee8cc1Swenshuai.xi 186*53ee8cc1Swenshuai.xi /* Return currently selected signal mask. */ 187*53ee8cc1Swenshuai.xi extern int siggetmask (void) __THROW __attribute_deprecated__; 188*53ee8cc1Swenshuai.xi #endif /* Use BSD. */ 189*53ee8cc1Swenshuai.xi 190*53ee8cc1Swenshuai.xi 191*53ee8cc1Swenshuai.xi #ifdef __USE_MISC 192*53ee8cc1Swenshuai.xi # define NSIG _NSIG 193*53ee8cc1Swenshuai.xi #endif 194*53ee8cc1Swenshuai.xi 195*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 196*53ee8cc1Swenshuai.xi typedef __sighandler_t sighandler_t; 197*53ee8cc1Swenshuai.xi #endif 198*53ee8cc1Swenshuai.xi 199*53ee8cc1Swenshuai.xi /* 4.4 BSD uses the name `sig_t' for this. */ 200*53ee8cc1Swenshuai.xi #ifdef __USE_BSD 201*53ee8cc1Swenshuai.xi typedef __sighandler_t sig_t; 202*53ee8cc1Swenshuai.xi #endif 203*53ee8cc1Swenshuai.xi 204*53ee8cc1Swenshuai.xi #ifdef __USE_POSIX 205*53ee8cc1Swenshuai.xi 206*53ee8cc1Swenshuai.xi # ifdef __USE_POSIX199309 207*53ee8cc1Swenshuai.xi /* We need `struct timespec' later on. */ 208*53ee8cc1Swenshuai.xi # define __need_timespec 209*53ee8cc1Swenshuai.xi # include <time.h> 210*53ee8cc1Swenshuai.xi 211*53ee8cc1Swenshuai.xi /* Get the `siginfo_t' type plus the needed symbols. */ 212*53ee8cc1Swenshuai.xi # include <bits/siginfo.h> 213*53ee8cc1Swenshuai.xi # endif 214*53ee8cc1Swenshuai.xi 215*53ee8cc1Swenshuai.xi /* Clear all signals from SET. */ 216*53ee8cc1Swenshuai.xi extern int sigemptyset (sigset_t *__set) __THROW __nonnull ((1)); 217*53ee8cc1Swenshuai.xi 218*53ee8cc1Swenshuai.xi /* Set all signals in SET. */ 219*53ee8cc1Swenshuai.xi extern int sigfillset (sigset_t *__set) __THROW __nonnull ((1)); 220*53ee8cc1Swenshuai.xi 221*53ee8cc1Swenshuai.xi /* Add SIGNO to SET. */ 222*53ee8cc1Swenshuai.xi extern int sigaddset (sigset_t *__set, int __signo) __THROW __nonnull ((1)); 223*53ee8cc1Swenshuai.xi 224*53ee8cc1Swenshuai.xi /* Remove SIGNO from SET. */ 225*53ee8cc1Swenshuai.xi extern int sigdelset (sigset_t *__set, int __signo) __THROW __nonnull ((1)); 226*53ee8cc1Swenshuai.xi 227*53ee8cc1Swenshuai.xi /* Return 1 if SIGNO is in SET, 0 if not. */ 228*53ee8cc1Swenshuai.xi extern int sigismember (__const sigset_t *__set, int __signo) 229*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)); 230*53ee8cc1Swenshuai.xi 231*53ee8cc1Swenshuai.xi # ifdef __USE_GNU 232*53ee8cc1Swenshuai.xi /* Return non-empty value is SET is not empty. */ 233*53ee8cc1Swenshuai.xi extern int sigisemptyset (__const sigset_t *__set) __THROW __nonnull ((1)); 234*53ee8cc1Swenshuai.xi 235*53ee8cc1Swenshuai.xi /* Build new signal set by combining the two inputs set using logical AND. */ 236*53ee8cc1Swenshuai.xi extern int sigandset (sigset_t *__set, __const sigset_t *__left, 237*53ee8cc1Swenshuai.xi __const sigset_t *__right) __THROW __nonnull ((1, 2, 3)); 238*53ee8cc1Swenshuai.xi 239*53ee8cc1Swenshuai.xi /* Build new signal set by combining the two inputs set using logical OR. */ 240*53ee8cc1Swenshuai.xi extern int sigorset (sigset_t *__set, __const sigset_t *__left, 241*53ee8cc1Swenshuai.xi __const sigset_t *__right) __THROW __nonnull ((1, 2, 3)); 242*53ee8cc1Swenshuai.xi # endif /* GNU */ 243*53ee8cc1Swenshuai.xi 244*53ee8cc1Swenshuai.xi /* Get the system-specific definitions of `struct sigaction' 245*53ee8cc1Swenshuai.xi and the `SA_*' and `SIG_*'. constants. */ 246*53ee8cc1Swenshuai.xi # include <bits/sigaction.h> 247*53ee8cc1Swenshuai.xi 248*53ee8cc1Swenshuai.xi /* Get and/or change the set of blocked signals. */ 249*53ee8cc1Swenshuai.xi extern int sigprocmask (int __how, __const sigset_t *__restrict __set, 250*53ee8cc1Swenshuai.xi sigset_t *__restrict __oset) __THROW; 251*53ee8cc1Swenshuai.xi 252*53ee8cc1Swenshuai.xi /* Change the set of blocked signals to SET, 253*53ee8cc1Swenshuai.xi wait until a signal arrives, and restore the set of blocked signals. 254*53ee8cc1Swenshuai.xi 255*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 256*53ee8cc1Swenshuai.xi __THROW. */ 257*53ee8cc1Swenshuai.xi extern int sigsuspend (__const sigset_t *__set) __nonnull ((1)); 258*53ee8cc1Swenshuai.xi 259*53ee8cc1Swenshuai.xi /* Get and/or set the action for signal SIG. */ 260*53ee8cc1Swenshuai.xi extern int sigaction (int __sig, __const struct sigaction *__restrict __act, 261*53ee8cc1Swenshuai.xi struct sigaction *__restrict __oact) __THROW; 262*53ee8cc1Swenshuai.xi 263*53ee8cc1Swenshuai.xi /* Put in SET all signals that are blocked and waiting to be delivered. */ 264*53ee8cc1Swenshuai.xi extern int sigpending (sigset_t *__set) __THROW __nonnull ((1)); 265*53ee8cc1Swenshuai.xi 266*53ee8cc1Swenshuai.xi 267*53ee8cc1Swenshuai.xi /* Select any of pending signals from SET or wait for any to arrive. 268*53ee8cc1Swenshuai.xi 269*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 270*53ee8cc1Swenshuai.xi __THROW. */ 271*53ee8cc1Swenshuai.xi extern int sigwait (__const sigset_t *__restrict __set, int *__restrict __sig) 272*53ee8cc1Swenshuai.xi __nonnull ((1, 2)); 273*53ee8cc1Swenshuai.xi 274*53ee8cc1Swenshuai.xi # ifdef __USE_POSIX199309 275*53ee8cc1Swenshuai.xi /* Select any of pending signals from SET and place information in INFO. 276*53ee8cc1Swenshuai.xi 277*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 278*53ee8cc1Swenshuai.xi __THROW. */ 279*53ee8cc1Swenshuai.xi extern int sigwaitinfo (__const sigset_t *__restrict __set, 280*53ee8cc1Swenshuai.xi siginfo_t *__restrict __info) __nonnull ((1)); 281*53ee8cc1Swenshuai.xi 282*53ee8cc1Swenshuai.xi /* Select any of pending signals from SET and place information in INFO. 283*53ee8cc1Swenshuai.xi Wait the time specified by TIMEOUT if no signal is pending. 284*53ee8cc1Swenshuai.xi 285*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 286*53ee8cc1Swenshuai.xi __THROW. */ 287*53ee8cc1Swenshuai.xi extern int sigtimedwait (__const sigset_t *__restrict __set, 288*53ee8cc1Swenshuai.xi siginfo_t *__restrict __info, 289*53ee8cc1Swenshuai.xi __const struct timespec *__restrict __timeout) 290*53ee8cc1Swenshuai.xi __nonnull ((1)); 291*53ee8cc1Swenshuai.xi 292*53ee8cc1Swenshuai.xi /* Send signal SIG to the process PID. Associate data in VAL with the 293*53ee8cc1Swenshuai.xi signal. */ 294*53ee8cc1Swenshuai.xi extern int sigqueue (__pid_t __pid, int __sig, __const union sigval __val) 295*53ee8cc1Swenshuai.xi __THROW; 296*53ee8cc1Swenshuai.xi # endif /* Use POSIX 199306. */ 297*53ee8cc1Swenshuai.xi 298*53ee8cc1Swenshuai.xi #endif /* Use POSIX. */ 299*53ee8cc1Swenshuai.xi 300*53ee8cc1Swenshuai.xi #ifdef __USE_BSD 301*53ee8cc1Swenshuai.xi 302*53ee8cc1Swenshuai.xi /* Names of the signals. This variable exists only for compatibility. 303*53ee8cc1Swenshuai.xi Use `strsignal' instead (see <string.h>). */ 304*53ee8cc1Swenshuai.xi extern __const char *__const _sys_siglist[_NSIG]; 305*53ee8cc1Swenshuai.xi extern __const char *__const sys_siglist[_NSIG]; 306*53ee8cc1Swenshuai.xi 307*53ee8cc1Swenshuai.xi /* Structure passed to `sigvec'. */ 308*53ee8cc1Swenshuai.xi struct sigvec 309*53ee8cc1Swenshuai.xi { 310*53ee8cc1Swenshuai.xi __sighandler_t sv_handler; /* Signal handler. */ 311*53ee8cc1Swenshuai.xi int sv_mask; /* Mask of signals to be blocked. */ 312*53ee8cc1Swenshuai.xi 313*53ee8cc1Swenshuai.xi int sv_flags; /* Flags (see below). */ 314*53ee8cc1Swenshuai.xi # define sv_onstack sv_flags /* 4.2 BSD compatibility. */ 315*53ee8cc1Swenshuai.xi }; 316*53ee8cc1Swenshuai.xi 317*53ee8cc1Swenshuai.xi /* Bits in `sv_flags'. */ 318*53ee8cc1Swenshuai.xi # define SV_ONSTACK (1 << 0)/* Take the signal on the signal stack. */ 319*53ee8cc1Swenshuai.xi # define SV_INTERRUPT (1 << 1)/* Do not restart system calls. */ 320*53ee8cc1Swenshuai.xi # define SV_RESETHAND (1 << 2)/* Reset handler to SIG_DFL on receipt. */ 321*53ee8cc1Swenshuai.xi 322*53ee8cc1Swenshuai.xi 323*53ee8cc1Swenshuai.xi /* If VEC is non-NULL, set the handler for SIG to the `sv_handler' member 324*53ee8cc1Swenshuai.xi of VEC. The signals in `sv_mask' will be blocked while the handler runs. 325*53ee8cc1Swenshuai.xi If the SV_RESETHAND bit is set in `sv_flags', the handler for SIG will be 326*53ee8cc1Swenshuai.xi reset to SIG_DFL before `sv_handler' is entered. If OVEC is non-NULL, 327*53ee8cc1Swenshuai.xi it is filled in with the old information for SIG. */ 328*53ee8cc1Swenshuai.xi extern int sigvec (int __sig, __const struct sigvec *__vec, 329*53ee8cc1Swenshuai.xi struct sigvec *__ovec) __THROW; 330*53ee8cc1Swenshuai.xi 331*53ee8cc1Swenshuai.xi 332*53ee8cc1Swenshuai.xi /* Get machine-dependent `struct sigcontext' and signal subcodes. */ 333*53ee8cc1Swenshuai.xi # include <bits/sigcontext.h> 334*53ee8cc1Swenshuai.xi 335*53ee8cc1Swenshuai.xi /* Restore the state saved in SCP. */ 336*53ee8cc1Swenshuai.xi extern int sigreturn (struct sigcontext *__scp) __THROW; 337*53ee8cc1Swenshuai.xi 338*53ee8cc1Swenshuai.xi #endif /* use BSD. */ 339*53ee8cc1Swenshuai.xi 340*53ee8cc1Swenshuai.xi 341*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED 342*53ee8cc1Swenshuai.xi # define __need_size_t 343*53ee8cc1Swenshuai.xi # include <stddef.h> 344*53ee8cc1Swenshuai.xi 345*53ee8cc1Swenshuai.xi /* If INTERRUPT is nonzero, make signal SIG interrupt system calls 346*53ee8cc1Swenshuai.xi (causing them to fail with EINTR); if INTERRUPT is zero, make system 347*53ee8cc1Swenshuai.xi calls be restarted after signal SIG. */ 348*53ee8cc1Swenshuai.xi extern int siginterrupt (int __sig, int __interrupt) __THROW; 349*53ee8cc1Swenshuai.xi 350*53ee8cc1Swenshuai.xi # include <bits/sigstack.h> 351*53ee8cc1Swenshuai.xi # ifdef __USE_XOPEN 352*53ee8cc1Swenshuai.xi /* This will define `ucontext_t' and `mcontext_t'. */ 353*53ee8cc1Swenshuai.xi # include <sys/ucontext.h> 354*53ee8cc1Swenshuai.xi # endif 355*53ee8cc1Swenshuai.xi 356*53ee8cc1Swenshuai.xi /* Run signals handlers on the stack specified by SS (if not NULL). 357*53ee8cc1Swenshuai.xi If OSS is not NULL, it is filled in with the old signal stack status. 358*53ee8cc1Swenshuai.xi This interface is obsolete and on many platform not implemented. */ 359*53ee8cc1Swenshuai.xi extern int sigstack (struct sigstack *__ss, struct sigstack *__oss) 360*53ee8cc1Swenshuai.xi __THROW __attribute_deprecated__; 361*53ee8cc1Swenshuai.xi 362*53ee8cc1Swenshuai.xi /* Alternate signal handler stack interface. 363*53ee8cc1Swenshuai.xi This interface should always be preferred over `sigstack'. */ 364*53ee8cc1Swenshuai.xi extern int sigaltstack (__const struct sigaltstack *__restrict __ss, 365*53ee8cc1Swenshuai.xi struct sigaltstack *__restrict __oss) __THROW; 366*53ee8cc1Swenshuai.xi 367*53ee8cc1Swenshuai.xi #endif /* use BSD or X/Open Unix. */ 368*53ee8cc1Swenshuai.xi 369*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN_EXTENDED 370*53ee8cc1Swenshuai.xi /* Simplified interface for signal management. */ 371*53ee8cc1Swenshuai.xi 372*53ee8cc1Swenshuai.xi /* Add SIG to the calling process' signal mask. */ 373*53ee8cc1Swenshuai.xi extern int sighold (int __sig) __THROW; 374*53ee8cc1Swenshuai.xi 375*53ee8cc1Swenshuai.xi /* Remove SIG from the calling process' signal mask. */ 376*53ee8cc1Swenshuai.xi extern int sigrelse (int __sig) __THROW; 377*53ee8cc1Swenshuai.xi 378*53ee8cc1Swenshuai.xi /* Set the disposition of SIG to SIG_IGN. */ 379*53ee8cc1Swenshuai.xi extern int sigignore (int __sig) __THROW; 380*53ee8cc1Swenshuai.xi 381*53ee8cc1Swenshuai.xi /* Set the disposition of SIG. */ 382*53ee8cc1Swenshuai.xi extern __sighandler_t sigset (int __sig, __sighandler_t __disp) __THROW; 383*53ee8cc1Swenshuai.xi #endif 384*53ee8cc1Swenshuai.xi 385*53ee8cc1Swenshuai.xi #if defined __USE_POSIX199506 || defined __USE_UNIX98 386*53ee8cc1Swenshuai.xi /* Some of the functions for handling signals in threaded programs must 387*53ee8cc1Swenshuai.xi be defined here. */ 388*53ee8cc1Swenshuai.xi # include <bits/pthreadtypes.h> 389*53ee8cc1Swenshuai.xi # include <bits/sigthread.h> 390*53ee8cc1Swenshuai.xi #endif /* use Unix98 */ 391*53ee8cc1Swenshuai.xi 392*53ee8cc1Swenshuai.xi /* The following functions are used internally in the C library and in 393*53ee8cc1Swenshuai.xi other code which need deep insights. */ 394*53ee8cc1Swenshuai.xi 395*53ee8cc1Swenshuai.xi /* Return number of available real-time signal with highest priority. */ 396*53ee8cc1Swenshuai.xi extern int __libc_current_sigrtmin (void) __THROW; 397*53ee8cc1Swenshuai.xi /* Return number of available real-time signal with lowest priority. */ 398*53ee8cc1Swenshuai.xi extern int __libc_current_sigrtmax (void) __THROW; 399*53ee8cc1Swenshuai.xi 400*53ee8cc1Swenshuai.xi #endif /* signal.h */ 401*53ee8cc1Swenshuai.xi 402*53ee8cc1Swenshuai.xi __END_DECLS 403*53ee8cc1Swenshuai.xi 404*53ee8cc1Swenshuai.xi #endif /* not signal.h */ 405