xref: /plan9/sys/include/ape/signal.h (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier #ifndef __SIGNAL_H
23e12c5d1SDavid du Colombier #define __SIGNAL_H
33e12c5d1SDavid du Colombier #pragma lib "/$M/lib/ape/libap.a"
43e12c5d1SDavid du Colombier 
53e12c5d1SDavid du Colombier typedef int sig_atomic_t;
63e12c5d1SDavid du Colombier 
7219b2ee8SDavid du Colombier /*
8219b2ee8SDavid du Colombier  * We don't give arg types for signal handlers, in spite of ANSI requirement
9219b2ee8SDavid du Colombier  * that it be 'int' (the signal number), because some programs need an
10219b2ee8SDavid du Colombier  * additional context argument.  So the real type of signal handlers is
11219b2ee8SDavid du Colombier  *      void handler(int sig, char *, struct Ureg *)
12219b2ee8SDavid du Colombier  * where the char * is the Plan 9 message and Ureg is defined in <ureg.h>
13219b2ee8SDavid du Colombier  */
14219b2ee8SDavid du Colombier #define SIG_DFL ((void (*)())0)
15219b2ee8SDavid du Colombier #define SIG_ERR ((void (*)())-1)
16219b2ee8SDavid du Colombier #define SIG_IGN ((void (*)())1)
173e12c5d1SDavid du Colombier 
183e12c5d1SDavid du Colombier #define	SIGHUP	1	/* hangup */
193e12c5d1SDavid du Colombier #define	SIGINT	2	/* interrupt */
203e12c5d1SDavid du Colombier #define	SIGQUIT	3	/* quit */
213e12c5d1SDavid du Colombier #define	SIGILL	4	/* illegal instruction (not reset when caught)*/
223e12c5d1SDavid du Colombier #define SIGABRT 5	/* used by abort */
233e12c5d1SDavid du Colombier #define	SIGFPE	6	/* floating point exception */
243e12c5d1SDavid du Colombier #define	SIGKILL	7	/* kill (cannot be caught or ignored) */
253e12c5d1SDavid du Colombier #define	SIGSEGV	8	/* segmentation violation */
263e12c5d1SDavid du Colombier #define	SIGPIPE	9	/* write on a pipe with no one to read it */
273e12c5d1SDavid du Colombier #define	SIGALRM	10	/* alarm clock */
283e12c5d1SDavid du Colombier #define	SIGTERM	11	/* software termination signal from kill */
293e12c5d1SDavid du Colombier #define	SIGUSR1	12	/* user defined signal 1 */
303e12c5d1SDavid du Colombier #define	SIGUSR2	13	/* user defined signal 2 */
31*7dd7cddfSDavid du Colombier #define	SIGBUS	14	/* bus error */
323e12c5d1SDavid du Colombier 
333e12c5d1SDavid du Colombier /* The following symbols must be defined, but the signals needn't be supported */
34*7dd7cddfSDavid du Colombier #define SIGCHLD	15	/* child process terminated or stopped */
35*7dd7cddfSDavid du Colombier #define SIGCONT 16	/* continue if stopped */
36*7dd7cddfSDavid du Colombier #define SIGSTOP 17	/* stop */
37*7dd7cddfSDavid du Colombier #define SIGTSTP	18	/* interactive stop */
38*7dd7cddfSDavid du Colombier #define SIGTTIN	19	/* read from ctl tty by member of background */
39*7dd7cddfSDavid du Colombier #define SIGTTOU	20	/* write to ctl tty by member of background */
403e12c5d1SDavid du Colombier 
41219b2ee8SDavid du Colombier #ifdef _BSD_EXTENSION
42*7dd7cddfSDavid du Colombier #define NSIG 21
43219b2ee8SDavid du Colombier #endif
44219b2ee8SDavid du Colombier 
453e12c5d1SDavid du Colombier #ifdef __cplusplus
463e12c5d1SDavid du Colombier extern "C" {
473e12c5d1SDavid du Colombier #endif
483e12c5d1SDavid du Colombier 
49219b2ee8SDavid du Colombier extern void (*signal(int, void (*)()))();
503e12c5d1SDavid du Colombier extern int raise(int);
513e12c5d1SDavid du Colombier 
523e12c5d1SDavid du Colombier #ifdef __cplusplus
533e12c5d1SDavid du Colombier }
543e12c5d1SDavid du Colombier #endif
553e12c5d1SDavid du Colombier 
563e12c5d1SDavid du Colombier #ifdef _POSIX_SOURCE
573e12c5d1SDavid du Colombier 
583e12c5d1SDavid du Colombier typedef long sigset_t;
593e12c5d1SDavid du Colombier struct sigaction {
60219b2ee8SDavid du Colombier 	void		(*sa_handler)();
613e12c5d1SDavid du Colombier 	sigset_t	sa_mask;
623e12c5d1SDavid du Colombier 	int		sa_flags;
63219b2ee8SDavid du Colombier };
643e12c5d1SDavid du Colombier /* values for sa_flags */
653e12c5d1SDavid du Colombier #define SA_NOCLDSTOP	1
663e12c5d1SDavid du Colombier 
673e12c5d1SDavid du Colombier /* first argument to sigprocmask */
683e12c5d1SDavid du Colombier #define SIG_BLOCK	1
693e12c5d1SDavid du Colombier #define SIG_UNBLOCK	2
703e12c5d1SDavid du Colombier #define SIG_SETMASK	3
713e12c5d1SDavid du Colombier 
723e12c5d1SDavid du Colombier #ifdef __cplusplus
733e12c5d1SDavid du Colombier extern "C" {
743e12c5d1SDavid du Colombier #endif
753e12c5d1SDavid du Colombier 
763e12c5d1SDavid du Colombier #ifdef __TYPES_H
773e12c5d1SDavid du Colombier extern int kill(pid_t, int);
783e12c5d1SDavid du Colombier #endif
793e12c5d1SDavid du Colombier extern int sigemptyset(sigset_t *);
803e12c5d1SDavid du Colombier extern int sigfillset(sigset_t *);
813e12c5d1SDavid du Colombier extern int sigaddset(sigset_t *, int);
823e12c5d1SDavid du Colombier extern int sigdelset(sigset_t *, int);
833e12c5d1SDavid du Colombier extern int sigismember(const sigset_t *, int);
843e12c5d1SDavid du Colombier extern int sigaction(int, const struct sigaction *, struct sigaction *);
853e12c5d1SDavid du Colombier extern int sigprocmask(int, sigset_t *, sigset_t *);
863e12c5d1SDavid du Colombier extern int sigpending(sigset_t *);
873e12c5d1SDavid du Colombier extern int sigsuspend(const sigset_t *);
883e12c5d1SDavid du Colombier 
893e12c5d1SDavid du Colombier #ifdef __cplusplus
903e12c5d1SDavid du Colombier }
913e12c5d1SDavid du Colombier #endif
923e12c5d1SDavid du Colombier 
933e12c5d1SDavid du Colombier #endif /* _POSIX_SOURCE */
943e12c5d1SDavid du Colombier 
953e12c5d1SDavid du Colombier #endif /* __SIGNAL_H */
96