home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- *
- * $Source: /unixb/home/unixlib/source/unixlib37/src/clib/h/RCS/signal,v $
- * $Date: 1996/10/30 21:58:58 $
- * $Revision: 1.3 $
- * $State: Rel $
- * $Author: unixlib $
- *
- * $Log: signal,v $
- * Revision 1.3 1996/10/30 21:58:58 unixlib
- * Massive changes made by Nick Burret and Peter Burwood.
- *
- * Revision 1.2 1996/05/06 09:01:33 unixlib
- * Updates to sources made by Nick Burrett, Peter Burwood and Simon Callan.
- * Saved for 3.7a release.
- *
- * Revision 1.1 1996/04/19 21:02:57 simon
- * Initial revision
- *
- ***************************************************************************/
-
- /* ANSI, POSIX and BSD signal handling. */
-
- #ifndef __SIGNAL_H
- #define __SIGNAL_H
-
- #ifndef __UNIXLIB_TYPES_H
- #include <unixlib/types.h>
- #endif
- #ifndef __STDDEF_H
- #include <stddef.h>
- #endif
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- /* Hangup (POSIX). */
- #define SIGHUP 1
- /* Interrupt (ANSI). */
- #define SIGINT 2
- /* Quit (POSIX). */
- #define SIGQUIT 3
- /* Illegal instruction (ANSI). */
- #define SIGILL 4
- /* Abort (ANSI). */
- #define SIGABRT SIGIOT
- /* Trace trap (POSIX). */
- #define SIGTRAP 5
- /* IOT trap (4.2 BSD). */
- #define SIGIOT 6
- /* EMT trap (4.2 BSD). */
- #define SIGEMT 7
- /* Floating-point exception (ANSI). */
- #define SIGFPE 8
- /* Kill, unblockable (POSIX). */
- #define SIGKILL 9
- /* Bus error (4.2 BSD). */
- #define SIGBUS 10
- /* Segmentation violation (ANSI). */
- #define SIGSEGV 11
- /* Bad argument to system call (4.2 BSD). */
- #define SIGSYS 12
- /* Broken pipe (POSIX). */
- #define SIGPIPE 13
- /* Alarm clock (POSIX). */
- #define SIGALRM 14
- /* Termination (ANSI). */
- #define SIGTERM 15
- /* Urgent, or out-of-band data arrives on a socket (4.2 BSD). */
- #define SIGURG 16
- /* Stop, unblockable (POSIX). */
- #define SIGSTOP 17
- /* Keyboard stop, Ctrl-Z (POSIX). */
- #define SIGTSTP 18
- /* Continue (POSIX). */
- #define SIGCONT 19
- /* Child process has terminated or stopped (POSIX). */
- #define SIGCHLD 20
- /* Obsolete name for SIGCHLD (System V). */
- #define SIGCLD SIGCHLD
- /* Background read from tty (POSIX). */
- #define SIGTTIN 21
- /* Backgroung write to tty (POSIX). */
- #define SIGTTOU 22
- /* File descriptor is ready to perform input or output (4.2 BSD). */
- #define SIGIO 23
- /* Similar to SIGIO (System V). */
- #define SIGPOLL SIGIO
- /* CPU time limit exceeded (4.2 BSD). */
- #define SIGXCPU 24
- /* File size limit exceeded (4.2 BSD). */
- #define SIGXFSZ 25
- /* Virtual alarm clock (4.2 BSD). */
- #define SIGVTALRM 26
- /* Profiling alarm clock (4.2 BSD). */
- #define SIGPROF 27
- /* Window size change (4.3 BSD) */
- #define SIGWINCH 28
- /* Information request (4.4 BSD). */
- #define SIGINFO 29
- /* User-defined signal 1 (POSIX). */
- #define SIGUSR1 30
- /* User-defined signal 2 (POSIX). */
- #define SIGUSR2 31
- /* Resource lost. */
- #define SIGLOST 32
- /* RISC OS error. */
- #define SIGERR 33
-
- /* Total number of signals defined. This should be one greater than
- the largest defined signal number. */
- #define _NSIG 34
- #define NSIG _NSIG
-
- /* Type of a signal handler. */
- typedef void (*__sighandler_t)(int);
- typedef __sighandler_t sighandler_t;
-
- extern int sys_nsig; /* = NSIG */
- extern char *sys_siglist[NSIG]; /* signal messages */
-
- /* Fake signal functions, based on the BSD versions. */
-
- /* Error return. */
- #define SIG_ERR ((__sighandler_t) -1)
-
- /* Default action. */
- #define SIG_DFL ((__sighandler_t) 0)
-
- /* Ignore signal. */
- #define SIG_IGN ((__sighandler_t) 1)
-
- extern __sighandler_t signal (int sig, __sighandler_t handler);
-
- /* Send signal 'sig' to process number 'pid'. If pid is zero,
- send sig to all processes in the current process's process group.
- If pid is < -1, send sig to all processes in process group -pid. */
- extern int kill (__pid_t pid, int sig);
-
- /* Send signal 'sig' to all processes in process group 'pgrp'.
- If pgrp is zero, send sig to all processes in the current
- process's process group. */
- extern int killpg (__pid_t pgrp, int sig);
-
- /* Raise signal sig. */
- extern int raise (int sig);
-
- /* Print a message describing the meaning of the given signal number. */
- extern void psignal (int sig, const char *s);
-
-
- /* BSD signal functions. */
-
- /* Block signals in mask, returning the old mask. */
- extern int sigblock (int mask);
-
- /* Set the mask of blocked signals to mask, return the old mask. */
- extern int sigsetmask (int mask);
-
- /* Set the mask of blocked signals to mask, wait for a signal
- to arrive, and then restore the mask. */
- extern int sigpause (int mask);
-
- typedef int __sig_atomic_t;
- #define sig_atomic_t __sig_atomic_t
-
- /* POSIX signal functions. */
-
- /* Don't rely on sigset_t remaining an unsigned long. It's usage
- could soon change into the structure form below. Use the
- signal functions below to manipulate its value. */
-
- typedef unsigned long int __sigset_t;
- #define sigset_t __sigset_t
-
- #if 0
- typedef struct __usigset
- {
- unsigned int sig[NSIG] : 1;
- } __sigset_t;
- #endif
-
- /* Structure describing the action to be taken when a signal arrives. */
- struct sigaction
- {
- /* Signal handler. */
- __sighandler_t sa_handler;
- /* Additional set of signals to be blocked. */
- __sigset_t sa_mask;
- /* Special flags. */
- int sa_flags;
- };
-
- /* Bits in sa_flags. */
-
- /* Take signal on signal stack. */
- #define SA_ONSTACK 0x1
- /* Don't restart syscall on signal return. */
- #define SA_RESTART 0x2
- /* Disable alternate signal stack. */
- #define SA_DISABLE 0x4
- /* Don't send SIGCHLD when children stop. */
- #define SA_NOCLDSTOP 0x8
-
-
- /* Values for the HOW argument to `sigprocmask'. */
-
- /* Block signals. */
- #define SIG_BLOCK 1
- /* Unblock signals. */
- #define SIG_UNBLOCK 2
- /* Set the set of blocked signals. */
- #define SIG_SETMASK 3
-
- /* Currently in an optimised state but this could soon change. */
- #define sigmask(sig) (((__sigset_t) 1) << ((sig) - 1))
- #define sigemptyset(set) ((*(set) = (__sigset_t) 0), 0)
- #define sigfillset(set) ((*(set) = ~(__sigset_t) 0), 0)
-
- /* Clear all signals from set. */
- extern int (sigemptyset) (__sigset_t *set);
-
- /* Set all signals in set. */
- extern int (sigfillset) (__sigset_t *set);
-
- extern sigset_t (sigmask) (int sig);
-
- /* Add signo to set. */
- extern int sigaddset (__sigset_t *set, int signo);
-
- /* Remove signo from set. */
- extern int sigdelset (__sigset_t *set, int signo);
-
- /* Remove 1 if signo is in set, 0 if not. */
- extern int sigismember (const __sigset_t *set, int signo);
-
- /* Get and/or change the set of blocked signals. */
- extern int sigprocmask (int how, const __sigset_t *set, __sigset_t *oldset);
-
- /* Change the set of blocked signals,
- wait until a signal arrives, and restore the set of blocked signals. */
- extern int sigsuspend (const __sigset_t *set);
-
- /* Get and/or set the action for signal sig. */
- extern int sigaction (int sig, const struct sigaction *act,
- struct sigaction *oldact);
-
- /* Put in set all signals that are blocked and waiting to be delivered. */
- extern int sigpending (__sigset_t *set);
-
- /* BSD signal handling functionality. */
- #if 0
- struct sigvec
- {
- /* Signal handler. */
- sighandler_t sv_handler;
- /* Mask of signals to be blocked. */
- int sv_mask;
- /* Flags. */
- int sv_flags;
- /* 4.2 BSD compatibility. */
- #define sv_onstack sv_flags
- };
-
- /* Bits in sv_flags. */
-
- /* Take the signal on the signal stack. */
- #define SV_ONSTACK 1
- /* Do not restart system calls. */
- #define SV_INTERRUPT 2
- /* Reset handler to SIG_DFL on receipt. */
- #define SV_RESETHAND 4
-
- extern int sigvec (int sig, const struct sigvec *vec, struct sigvec *ovec);
-
- /* If interrupt is nonzero, make signal sig interrupt system calls
- (causing them to fail with EINTR); if interrupt is zero, make
- system calls be restarted after signal sig. */
- extern int siginterrupt (int sig, int interrupt);
- #endif
-
- /* Signal stack structure (BSD style). */
- struct sigstack
- {
- /* Signal stack pointer. */
- void *ss_sp;
- /* Non zero if executing on this stack. */
- int ss_onstack;
- };
-
- /* Run signal handlers on the stack specified by 'ss' (if not NULL).
- The old status is returned in oss (if not NULL). */
- extern int sigstack (const struct sigstack *ss, struct sigstack *oss);
-
- /* Signal stack structure (POSIX alternative interface). */
- struct sigaltstack
- {
- void *ss_sp;
- size_t ss_size;
- int ss_flags;
- };
-
- extern int sigaltstack (const struct sigaltstack *ss,
- struct sigaltstack *oss);
-
- /* Signal stack constants. */
-
- /* The recommended signal stack size for a signal handler. */
- #define SIGSTKSZ 4096
-
- /* The absolute safe minimum signal stack size
- for running signal handlers in. */
-
- #define MINSIGSTKSZ 2048
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif
-