hjl / source-git / glibc

Forked from source-git/glibc 3 years ago
Clone

Blame signal/signal.h

Packit 6c4009
/* Copyright (C) 1991-2018 Free Software Foundation, Inc.
Packit 6c4009
   This file is part of the GNU C Library.
Packit 6c4009
Packit 6c4009
   The GNU C Library is free software; you can redistribute it and/or
Packit 6c4009
   modify it under the terms of the GNU Lesser General Public
Packit 6c4009
   License as published by the Free Software Foundation; either
Packit 6c4009
   version 2.1 of the License, or (at your option) any later version.
Packit 6c4009
Packit 6c4009
   The GNU C Library is distributed in the hope that it will be useful,
Packit 6c4009
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6c4009
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 6c4009
   Lesser General Public License for more details.
Packit 6c4009
Packit 6c4009
   You should have received a copy of the GNU Lesser General Public
Packit 6c4009
   License along with the GNU C Library; if not, see
Packit 6c4009
   <http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
/*
Packit 6c4009
 *	ISO C99 Standard: 7.14 Signal handling <signal.h>
Packit 6c4009
 */
Packit 6c4009
Packit 6c4009
#ifndef	_SIGNAL_H
Packit 6c4009
#define _SIGNAL_H
Packit 6c4009
Packit 6c4009
#include <features.h>
Packit 6c4009
Packit 6c4009
__BEGIN_DECLS
Packit 6c4009
Packit 6c4009
#include <bits/types.h>
Packit 6c4009
#include <bits/signum.h>
Packit 6c4009
Packit 6c4009
#include <bits/types/sig_atomic_t.h>
Packit 6c4009
Packit 6c4009
#if defined __USE_POSIX
Packit 6c4009
#include <bits/types/sigset_t.h>
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#if defined __USE_XOPEN || defined __USE_XOPEN2K
Packit 6c4009
# ifndef __pid_t_defined
Packit 6c4009
typedef __pid_t pid_t;
Packit 6c4009
#  define __pid_t_defined
Packit 6c4009
#endif
Packit 6c4009
#ifdef __USE_XOPEN
Packit 6c4009
# endif
Packit 6c4009
# ifndef __uid_t_defined
Packit 6c4009
typedef __uid_t uid_t;
Packit 6c4009
#  define __uid_t_defined
Packit 6c4009
# endif
Packit 6c4009
#endif	/* Unix98 */
Packit 6c4009
Packit 6c4009
#ifdef __USE_POSIX199309
Packit 6c4009
/* We need `struct timespec' later on.  */
Packit 6c4009
# include <bits/types/struct_timespec.h>
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#if defined __USE_POSIX199309 || defined __USE_XOPEN_EXTENDED
Packit 6c4009
# include <bits/types/siginfo_t.h>
Packit 6c4009
# include <bits/siginfo-consts.h>
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#ifdef __USE_MISC
Packit 6c4009
# include <bits/types/sigval_t.h>
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#ifdef __USE_POSIX199309
Packit 6c4009
# include <bits/types/sigevent_t.h>
Packit 6c4009
# include <bits/sigevent-consts.h>
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Type of a signal handler.  */
Packit 6c4009
typedef void (*__sighandler_t) (int);
Packit 6c4009
Packit 6c4009
/* The X/Open definition of `signal' specifies the SVID semantic.  Use
Packit 6c4009
   the additional function `sysv_signal' when X/Open compatibility is
Packit 6c4009
   requested.  */
Packit 6c4009
extern __sighandler_t __sysv_signal (int __sig, __sighandler_t __handler)
Packit 6c4009
     __THROW;
Packit 6c4009
#ifdef __USE_GNU
Packit 6c4009
extern __sighandler_t sysv_signal (int __sig, __sighandler_t __handler)
Packit 6c4009
     __THROW;
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
/* Set the handler for the signal SIG to HANDLER, returning the old
Packit 6c4009
   handler, or SIG_ERR on error.
Packit 6c4009
   By default `signal' has the BSD semantic.  */
Packit 6c4009
#ifdef __USE_MISC
Packit 6c4009
extern __sighandler_t signal (int __sig, __sighandler_t __handler)
Packit 6c4009
     __THROW;
Packit 6c4009
#else
Packit 6c4009
/* Make sure the used `signal' implementation is the SVID version. */
Packit 6c4009
# ifdef __REDIRECT_NTH
Packit 6c4009
extern __sighandler_t __REDIRECT_NTH (signal,
Packit 6c4009
				      (int __sig, __sighandler_t __handler),
Packit 6c4009
				      __sysv_signal);
Packit 6c4009
# else
Packit 6c4009
#  define signal __sysv_signal
Packit 6c4009
# endif
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#if defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8
Packit 6c4009
/* The X/Open definition of `signal' conflicts with the BSD version.
Packit 6c4009
   So they defined another function `bsd_signal'.  */
Packit 6c4009
extern __sighandler_t bsd_signal (int __sig, __sighandler_t __handler)
Packit 6c4009
     __THROW;
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
/* Send signal SIG to process number PID.  If PID is zero,
Packit 6c4009
   send SIG to all processes in the current process's process group.
Packit 6c4009
   If PID is < -1, send SIG to all processes in process group - PID.  */
Packit 6c4009
#ifdef __USE_POSIX
Packit 6c4009
extern int kill (__pid_t __pid, int __sig) __THROW;
Packit 6c4009
#endif /* Use POSIX.  */
Packit 6c4009
Packit 6c4009
#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
Packit 6c4009
/* Send SIG to all processes in process group PGRP.
Packit 6c4009
   If PGRP is zero, send SIG to all processes in
Packit 6c4009
   the current process's process group.  */
Packit 6c4009
extern int killpg (__pid_t __pgrp, int __sig) __THROW;
Packit 6c4009
#endif /* Use misc || X/Open Unix.  */
Packit 6c4009
Packit 6c4009
/* Raise signal SIG, i.e., send SIG to yourself.  */
Packit 6c4009
extern int raise (int __sig) __THROW;
Packit 6c4009
Packit 6c4009
#ifdef __USE_MISC
Packit 6c4009
/* SVID names for the same things.  */
Packit 6c4009
extern __sighandler_t ssignal (int __sig, __sighandler_t __handler)
Packit 6c4009
     __THROW;
Packit 6c4009
extern int gsignal (int __sig) __THROW;
Packit 6c4009
#endif /* Use misc.  */
Packit 6c4009
Packit 6c4009
#ifdef __USE_XOPEN2K8
Packit 6c4009
/* Print a message describing the meaning of the given signal number.  */
Packit 6c4009
extern void psignal (int __sig, const char *__s);
Packit 6c4009
Packit 6c4009
/* Print a message describing the meaning of the given signal information.  */
Packit 6c4009
extern void psiginfo (const siginfo_t *__pinfo, const char *__s);
Packit 6c4009
#endif /* POSIX 2008.  */
Packit 6c4009
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* The `sigpause' function in X/Open defines the argument as the
Packit 6c4009
   signal number.  This requires redirecting to another function
Packit 6c4009
   because the default version in glibc uses an old BSD interface.
Packit 6c4009
Packit 6c4009
   This function is a cancellation point and therefore not marked with
Packit 6c4009
   __THROW.  */
Packit 6c4009
Packit 6c4009
#ifdef __USE_XOPEN_EXTENDED
Packit 6c4009
# ifdef __GNUC__
Packit 6c4009
extern int sigpause (int __sig) __asm__ ("__xpg_sigpause");
Packit 6c4009
# else
Packit 6c4009
extern int __sigpause (int __sig_or_mask, int __is_sig);
Packit 6c4009
/* Remove a signal from the signal mask and suspend the process.  */
Packit 6c4009
#  define sigpause(sig) __sigpause ((sig), 1)
Packit 6c4009
# endif
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
Packit 6c4009
#ifdef __USE_MISC
Packit 6c4009
/* None of the following functions should be used anymore.  They are here
Packit 6c4009
   only for compatibility.  A single word (`int') is not guaranteed to be
Packit 6c4009
   enough to hold a complete signal mask and therefore these functions
Packit 6c4009
   simply do not work in many situations.  Use `sigprocmask' instead.  */
Packit 6c4009
Packit 6c4009
/* Compute mask for signal SIG.  */
Packit 6c4009
# define sigmask(sig) ((int)(1u << ((sig) - 1)))
Packit 6c4009
Packit 6c4009
/* Block signals in MASK, returning the old mask.  */
Packit 6c4009
extern int sigblock (int __mask) __THROW __attribute_deprecated__;
Packit 6c4009
Packit 6c4009
/* Set the mask of blocked signals to MASK, returning the old mask.  */
Packit 6c4009
extern int sigsetmask (int __mask) __THROW __attribute_deprecated__;
Packit 6c4009
Packit 6c4009
/* Return currently selected signal mask.  */
Packit 6c4009
extern int siggetmask (void) __THROW __attribute_deprecated__;
Packit 6c4009
#endif /* Use misc.  */
Packit 6c4009
Packit 6c4009
Packit 6c4009
#ifdef __USE_MISC
Packit 6c4009
# define NSIG	_NSIG
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#ifdef __USE_GNU
Packit 6c4009
typedef __sighandler_t sighandler_t;
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
/* 4.4 BSD uses the name `sig_t' for this.  */
Packit 6c4009
#ifdef __USE_MISC
Packit 6c4009
typedef __sighandler_t sig_t;
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#ifdef __USE_POSIX
Packit 6c4009
Packit 6c4009
/* Clear all signals from SET.  */
Packit 6c4009
extern int sigemptyset (sigset_t *__set) __THROW __nonnull ((1));
Packit 6c4009
Packit 6c4009
/* Set all signals in SET.  */
Packit 6c4009
extern int sigfillset (sigset_t *__set) __THROW __nonnull ((1));
Packit 6c4009
Packit 6c4009
/* Add SIGNO to SET.  */
Packit 6c4009
extern int sigaddset (sigset_t *__set, int __signo) __THROW __nonnull ((1));
Packit 6c4009
Packit 6c4009
/* Remove SIGNO from SET.  */
Packit 6c4009
extern int sigdelset (sigset_t *__set, int __signo) __THROW __nonnull ((1));
Packit 6c4009
Packit 6c4009
/* Return 1 if SIGNO is in SET, 0 if not.  */
Packit 6c4009
extern int sigismember (const sigset_t *__set, int __signo)
Packit 6c4009
     __THROW __nonnull ((1));
Packit 6c4009
Packit 6c4009
# ifdef __USE_GNU
Packit 6c4009
/* Return non-empty value is SET is not empty.  */
Packit 6c4009
extern int sigisemptyset (const sigset_t *__set) __THROW __nonnull ((1));
Packit 6c4009
Packit 6c4009
/* Build new signal set by combining the two inputs set using logical AND.  */
Packit 6c4009
extern int sigandset (sigset_t *__set, const sigset_t *__left,
Packit 6c4009
		      const sigset_t *__right) __THROW __nonnull ((1, 2, 3));
Packit 6c4009
Packit 6c4009
/* Build new signal set by combining the two inputs set using logical OR.  */
Packit 6c4009
extern int sigorset (sigset_t *__set, const sigset_t *__left,
Packit 6c4009
		     const sigset_t *__right) __THROW __nonnull ((1, 2, 3));
Packit 6c4009
# endif /* GNU */
Packit 6c4009
Packit 6c4009
/* Get the system-specific definitions of `struct sigaction'
Packit 6c4009
   and the `SA_*' and `SIG_*'. constants.  */
Packit 6c4009
# include <bits/sigaction.h>
Packit 6c4009
Packit 6c4009
/* Get and/or change the set of blocked signals.  */
Packit 6c4009
extern int sigprocmask (int __how, const sigset_t *__restrict __set,
Packit 6c4009
			sigset_t *__restrict __oset) __THROW;
Packit 6c4009
Packit 6c4009
/* Change the set of blocked signals to SET,
Packit 6c4009
   wait until a signal arrives, and restore the set of blocked signals.
Packit 6c4009
Packit 6c4009
   This function is a cancellation point and therefore not marked with
Packit 6c4009
   __THROW.  */
Packit 6c4009
extern int sigsuspend (const sigset_t *__set) __nonnull ((1));
Packit 6c4009
Packit 6c4009
/* Get and/or set the action for signal SIG.  */
Packit 6c4009
extern int sigaction (int __sig, const struct sigaction *__restrict __act,
Packit 6c4009
		      struct sigaction *__restrict __oact) __THROW;
Packit 6c4009
Packit 6c4009
/* Put in SET all signals that are blocked and waiting to be delivered.  */
Packit 6c4009
extern int sigpending (sigset_t *__set) __THROW __nonnull ((1));
Packit 6c4009
Packit 6c4009
Packit 6c4009
# ifdef __USE_POSIX199506
Packit 6c4009
/* Select any of pending signals from SET or wait for any to arrive.
Packit 6c4009
Packit 6c4009
   This function is a cancellation point and therefore not marked with
Packit 6c4009
   __THROW.  */
Packit 6c4009
extern int sigwait (const sigset_t *__restrict __set, int *__restrict __sig)
Packit 6c4009
     __nonnull ((1, 2));
Packit 6c4009
# endif /* Use POSIX 1995.  */
Packit 6c4009
Packit 6c4009
# ifdef __USE_POSIX199309
Packit 6c4009
/* Select any of pending signals from SET and place information in INFO.
Packit 6c4009
Packit 6c4009
   This function is a cancellation point and therefore not marked with
Packit 6c4009
   __THROW.  */
Packit 6c4009
extern int sigwaitinfo (const sigset_t *__restrict __set,
Packit 6c4009
			siginfo_t *__restrict __info) __nonnull ((1));
Packit 6c4009
Packit 6c4009
/* Select any of pending signals from SET and place information in INFO.
Packit 6c4009
   Wait the time specified by TIMEOUT if no signal is pending.
Packit 6c4009
Packit 6c4009
   This function is a cancellation point and therefore not marked with
Packit 6c4009
   __THROW.  */
Packit 6c4009
extern int sigtimedwait (const sigset_t *__restrict __set,
Packit 6c4009
			 siginfo_t *__restrict __info,
Packit 6c4009
			 const struct timespec *__restrict __timeout)
Packit 6c4009
     __nonnull ((1));
Packit 6c4009
Packit 6c4009
/* Send signal SIG to the process PID.  Associate data in VAL with the
Packit 6c4009
   signal.  */
Packit 6c4009
extern int sigqueue (__pid_t __pid, int __sig, const union sigval __val)
Packit 6c4009
     __THROW;
Packit 6c4009
# endif	/* Use POSIX 199306.  */
Packit 6c4009
Packit 6c4009
#endif /* Use POSIX.  */
Packit 6c4009
Packit 6c4009
#ifdef __USE_MISC
Packit 6c4009
Packit 6c4009
/* Names of the signals.  This variable exists only for compatibility.
Packit 6c4009
   Use `strsignal' instead (see <string.h>).  */
Packit 6c4009
extern const char *const _sys_siglist[_NSIG];
Packit 6c4009
extern const char *const sys_siglist[_NSIG];
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Get machine-dependent `struct sigcontext' and signal subcodes.  */
Packit 6c4009
# include <bits/sigcontext.h>
Packit 6c4009
Packit 6c4009
/* Restore the state saved in SCP.  */
Packit 6c4009
extern int sigreturn (struct sigcontext *__scp) __THROW;
Packit 6c4009
Packit 6c4009
#endif /* Use misc.  */
Packit 6c4009
Packit 6c4009
Packit 6c4009
#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
Packit 6c4009
# define __need_size_t
Packit 6c4009
# include <stddef.h>
Packit 6c4009
Packit 6c4009
# include <bits/types/stack_t.h>
Packit 6c4009
# if defined __USE_XOPEN || defined __USE_XOPEN2K8
Packit 6c4009
/* This will define `ucontext_t' and `mcontext_t'.  */
Packit 6c4009
#  include <sys/ucontext.h>
Packit 6c4009
# endif
Packit 6c4009
#endif /* Use POSIX.1-2008 or X/Open Unix.  */
Packit 6c4009
Packit 6c4009
#if defined __USE_XOPEN_EXTENDED || defined __USE_MISC
Packit 6c4009
/* If INTERRUPT is nonzero, make signal SIG interrupt system calls
Packit 6c4009
   (causing them to fail with EINTR); if INTERRUPT is zero, make system
Packit 6c4009
   calls be restarted after signal SIG.  */
Packit 6c4009
extern int siginterrupt (int __sig, int __interrupt) __THROW;
Packit 6c4009
Packit 6c4009
# include <bits/sigstack.h>
Packit 6c4009
# include <bits/ss_flags.h>
Packit 6c4009
Packit 6c4009
/* Alternate signal handler stack interface.
Packit 6c4009
   This interface should always be preferred over `sigstack'.  */
Packit 6c4009
extern int sigaltstack (const stack_t *__restrict __ss,
Packit 6c4009
			stack_t *__restrict __oss) __THROW;
Packit 6c4009
#endif /* __USE_XOPEN_EXTENDED || __USE_MISC */
Packit 6c4009
Packit 6c4009
#if ((defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8)	\
Packit 6c4009
     || defined __USE_MISC)
Packit 6c4009
# include <bits/types/struct_sigstack.h>
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#if ((defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K)	\
Packit 6c4009
     || defined __USE_MISC)
Packit 6c4009
/* Run signals handlers on the stack specified by SS (if not NULL).
Packit 6c4009
   If OSS is not NULL, it is filled in with the old signal stack status.
Packit 6c4009
   This interface is obsolete and on many platform not implemented.  */
Packit 6c4009
extern int sigstack (struct sigstack *__ss, struct sigstack *__oss)
Packit 6c4009
     __THROW __attribute_deprecated__;
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#ifdef __USE_XOPEN_EXTENDED
Packit 6c4009
/* Simplified interface for signal management.  */
Packit 6c4009
Packit 6c4009
/* Add SIG to the calling process' signal mask.  */
Packit 6c4009
extern int sighold (int __sig) __THROW;
Packit 6c4009
Packit 6c4009
/* Remove SIG from the calling process' signal mask.  */
Packit 6c4009
extern int sigrelse (int __sig) __THROW;
Packit 6c4009
Packit 6c4009
/* Set the disposition of SIG to SIG_IGN.  */
Packit 6c4009
extern int sigignore (int __sig) __THROW;
Packit 6c4009
Packit 6c4009
/* Set the disposition of SIG.  */
Packit 6c4009
extern __sighandler_t sigset (int __sig, __sighandler_t __disp) __THROW;
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#if defined __USE_POSIX199506 || defined __USE_UNIX98
Packit 6c4009
/* Some of the functions for handling signals in threaded programs must
Packit 6c4009
   be defined here.  */
Packit 6c4009
# include <bits/pthreadtypes.h>
Packit 6c4009
# include <bits/sigthread.h>
Packit 6c4009
#endif /* use Unix98 */
Packit 6c4009
Packit 6c4009
/* The following functions are used internally in the C library and in
Packit 6c4009
   other code which need deep insights.  */
Packit 6c4009
Packit 6c4009
/* Return number of available real-time signal with highest priority.  */
Packit 6c4009
extern int __libc_current_sigrtmin (void) __THROW;
Packit 6c4009
/* Return number of available real-time signal with lowest priority.  */
Packit 6c4009
extern int __libc_current_sigrtmax (void) __THROW;
Packit 6c4009
Packit 6c4009
#define SIGRTMIN        (__libc_current_sigrtmin ())
Packit 6c4009
#define SIGRTMAX        (__libc_current_sigrtmax ())
Packit 6c4009
Packit 6c4009
__END_DECLS
Packit 6c4009
Packit 6c4009
#endif /* not signal.h */