xref: /plan9-contrib/sys/include/ape/signal.h (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
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 
7*219b2ee8SDavid du Colombier /*
8*219b2ee8SDavid du Colombier  * We don't give arg types for signal handlers, in spite of ANSI requirement
9*219b2ee8SDavid du Colombier  * that it be 'int' (the signal number), because some programs need an
10*219b2ee8SDavid du Colombier  * additional context argument.  So the real type of signal handlers is
11*219b2ee8SDavid du Colombier  *      void handler(int sig, char *, struct Ureg *)
12*219b2ee8SDavid du Colombier  * where the char * is the Plan 9 message and Ureg is defined in <ureg.h>
13*219b2ee8SDavid du Colombier  */
14*219b2ee8SDavid du Colombier #define SIG_DFL ((void (*)())0)
15*219b2ee8SDavid du Colombier #define SIG_ERR ((void (*)())-1)
16*219b2ee8SDavid 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 */
313e12c5d1SDavid du Colombier 
323e12c5d1SDavid du Colombier /* The following symbols must be defined, but the signals needn't be supported */
333e12c5d1SDavid du Colombier #define SIGCHLD	14	/* child process terminated or stopped */
343e12c5d1SDavid du Colombier #define SIGCONT 15	/* continue if stopped */
353e12c5d1SDavid du Colombier #define SIGSTOP 16	/* stop */
36bd389b36SDavid du Colombier #define SIGTSTP	17	/* interactive stop */
373e12c5d1SDavid du Colombier #define SIGTTIN	18	/* read from ctl tty by member of background */
383e12c5d1SDavid du Colombier #define SIGTTOU	19	/* write to ctl tty by member of background */
393e12c5d1SDavid du Colombier 
40*219b2ee8SDavid du Colombier #ifdef _BSD_EXTENSION
41*219b2ee8SDavid du Colombier #define NSIG 20
42*219b2ee8SDavid du Colombier #endif
43*219b2ee8SDavid du Colombier 
443e12c5d1SDavid du Colombier #ifdef __cplusplus
453e12c5d1SDavid du Colombier extern "C" {
463e12c5d1SDavid du Colombier #endif
473e12c5d1SDavid du Colombier 
48*219b2ee8SDavid du Colombier extern void (*signal(int, void (*)()))();
493e12c5d1SDavid du Colombier extern int raise(int);
503e12c5d1SDavid du Colombier 
513e12c5d1SDavid du Colombier #ifdef __cplusplus
523e12c5d1SDavid du Colombier }
533e12c5d1SDavid du Colombier #endif
543e12c5d1SDavid du Colombier 
553e12c5d1SDavid du Colombier #ifdef _POSIX_SOURCE
563e12c5d1SDavid du Colombier 
573e12c5d1SDavid du Colombier typedef long sigset_t;
583e12c5d1SDavid du Colombier struct sigaction {
59*219b2ee8SDavid du Colombier 	void		(*sa_handler)();
603e12c5d1SDavid du Colombier 	sigset_t	sa_mask;
613e12c5d1SDavid du Colombier 	int		sa_flags;
62*219b2ee8SDavid du Colombier };
633e12c5d1SDavid du Colombier /* values for sa_flags */
643e12c5d1SDavid du Colombier #define SA_NOCLDSTOP	1
653e12c5d1SDavid du Colombier 
663e12c5d1SDavid du Colombier /* first argument to sigprocmask */
673e12c5d1SDavid du Colombier #define SIG_BLOCK	1
683e12c5d1SDavid du Colombier #define SIG_UNBLOCK	2
693e12c5d1SDavid du Colombier #define SIG_SETMASK	3
703e12c5d1SDavid du Colombier 
713e12c5d1SDavid du Colombier #ifdef __cplusplus
723e12c5d1SDavid du Colombier extern "C" {
733e12c5d1SDavid du Colombier #endif
743e12c5d1SDavid du Colombier 
753e12c5d1SDavid du Colombier #ifdef __TYPES_H
763e12c5d1SDavid du Colombier extern int kill(pid_t, int);
773e12c5d1SDavid du Colombier #endif
783e12c5d1SDavid du Colombier extern int sigemptyset(sigset_t *);
793e12c5d1SDavid du Colombier extern int sigfillset(sigset_t *);
803e12c5d1SDavid du Colombier extern int sigaddset(sigset_t *, int);
813e12c5d1SDavid du Colombier extern int sigdelset(sigset_t *, int);
823e12c5d1SDavid du Colombier extern int sigismember(const sigset_t *, int);
833e12c5d1SDavid du Colombier extern int sigaction(int, const struct sigaction *, struct sigaction *);
843e12c5d1SDavid du Colombier extern int sigprocmask(int, sigset_t *, sigset_t *);
853e12c5d1SDavid du Colombier extern int sigpending(sigset_t *);
863e12c5d1SDavid du Colombier extern int sigsuspend(const sigset_t *);
873e12c5d1SDavid du Colombier 
883e12c5d1SDavid du Colombier #ifdef __cplusplus
893e12c5d1SDavid du Colombier }
903e12c5d1SDavid du Colombier #endif
913e12c5d1SDavid du Colombier 
923e12c5d1SDavid du Colombier #endif /* _POSIX_SOURCE */
933e12c5d1SDavid du Colombier 
943e12c5d1SDavid du Colombier #endif /* __SIGNAL_H */
95