/* $Id: signal.h,v 1.5 2002/10/29 04:45:18 rex Exp $ */ /* * signal.h * * signals. Conforming to the Single UNIX(r) Specification Version 2, * System Interface & Headers Issue 5 * * This file is part of the ReactOS Operating System. * * Contributors: * Created by KJK::Hyperion * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * */ #ifndef __SIGNAL_H_INCLUDED__ #define __SIGNAL_H_INCLUDED__ /* INCLUDES */ #include #include /* OBJECTS */ /* TYPES */ /* pre-declaration of time.h types to suppress warnings caused by circular dependencies */ struct timespec; typedef int sig_atomic_t; /* Integral type of an object that can be accessed as an atomic entity, even in the presence of asynchronous interrupts */ typedef unsigned long int sigset_t; /* Integral or structure type of an object used to represent sets of signals. */ union sigval { int sival_int; /* integer signal value */ void* sival_ptr; /* pointer signal value */ }; struct sigevent { int sigev_notify; /* notification type */ int sigev_signo; /* signal number */ union sigval sigev_value; /* signal value */ void (* sigev_notify_function)(union sigval); /* notification function */ pthread_attr_t * sigev_notify_attributes; /* notification attributes */ }; typedef struct __tagsiginfo_t { int si_signo; /* signal number */ int si_errno; /* if non-zero, an errno value associated with this signal, as defined in */ int si_code; /* signal code */ pid_t si_pid; /* sending process ID */ uid_t si_uid; /* real user ID of sending process */ void *si_addr; /* address of faulting instruction */ int si_status; /* exit value or signal */ long si_band; /* band event for SIGPOLL */ union sigval si_value; /* signal value */ } siginfo_t; struct sigaction { void (* sa_handler)(int); /* what to do on receipt of signal */ sigset_t sa_mask; /* set of signals to be blocked during execution of the signal handling function */ int sa_flags; /* special flags */ void (* sa_sigaction)(int, siginfo_t *, void *); /* pointer to signal handler function or one of the macros SIG_IGN or SIG_DFL */ }; typedef struct __tagstack_t { void *ss_sp; /* stack base or pointer */ size_t ss_size; /* stack size */ int ss_flags; /* flags */ } stack_t; struct sigstack { int ss_onstack; /* non-zero when signal stack is in use */ void *ss_sp; /* signal stack pointer */ }; /* CONSTANTS */ #define SIG_DFL ((void (*)(int))(0xFFFFFFFF)) /* Request for default signal handling. */ #define SIG_ERR ((void (*)(int))(0x00000000)) /* Return value from signal() in case of error. */ #define SIG_IGN ((void (*)(int))(0x00000001)) /* Request that signal be ignored. */ #define SIG_HOLD ((void (*)(int))(0x00000002)) /* Request that signal be held. */ #define SIGEV_NONE (0) /* No asynchronous notification will be delivered \ when the event of interest occurs. */ #define SIGEV_SIGNAL (1) /* A queued signal, with an application-defined \ value, will be generated when the event of \ interest occurs. */ #define SIGEV_THREAD (2) /* A notification function will be called to perform \ notification. */ /* TODO: realtime features not supported yet */ #define SIGRTMIN (-1) #define SIGRTMAX (-1) #define SIGABRT ( 1) /* Process abort signal. */ #define SIGALRM ( 2) /* Alarm clock. */ #define SIGFPE ( 3) /* Erroneous arithmetic operation. */ #define SIGHUP ( 4) /* Hangup. */ #define SIGILL ( 5) /* Illegal instruction. */ #define SIGINT ( 6) /* Terminal interrupt signal. */ #define SIGKILL ( 7) /* Kill (cannot be caught or ignored). */ #define SIGPIPE ( 8) /* Write on a pipe with no one to read it. */ #define SIGQUIT ( 9) /* Terminal quit signal. */ #define SIGSEGV (10) /* Invalid memory reference. */ #define SIGTERM (11) /* Termination signal. */ #define SIGUSR1 (12) /* User-defined signal 1. */ #define SIGUSR2 (13) /* User-defined signal 2. */ #define SIGCHLD (14) /* Child process terminated or stopped. */ #define SIGCONT (15) /* Continue executing, if stopped. */ #define SIGSTOP (16) /* Stop executing (cannot be caught or ignored). */ #define SIGTSTP (17) /* Terminal stop signal. */ #define SIGTTIN (18) /* Background process attempting read. */ #define SIGTTOU (19) /* Background process attempting write. */ #define SIGBUS (20) /* Access to an undefined portion of a memory object. */ #define SIGPOLL (21) /* Pollable event. */ #define SIGPROF (22) /* Profiling timer expired. */ #define SIGSYS (23) /* Bad system call. */ #define SIGTRAP (24) /* Trace/breakpoint trap. */ #define SIGURG (25) /* High bandwidth data is available at a socket. */ #define SIGVTALRM (26) /* Virtual timer expired. */ #define SIGXCPU (27) /* CPU time limit exceeded. */ #define SIGXFSZ (28) /* File size limit exceeded. */ /* FIXME: the following constants need to be reviewed */ /* Do not generate SIGCHLD when children stop. */ #define SA_NOCLDSTOP (0x00000001) /* The resulting set is the union of the current set and the signal set pointed to by the argument set. */ #define SA_ONSTACK (0x00000002) /* Causes signal dispositions to be set to SIG_DFL on entry to signal handlers. */ #define SA_RESETHAND (0x00000004) /* Causes certain functions to become restartable. */ #define SA_RESTART (0x00000008) /* Causes extra information to be passed to signal handlers at the time of receipt of a signal. */ #define SA_SIGINFO (0x00000010) /* Causes implementations not to create zombie processes on child death. */ #define SA_NOCLDWAIT (0x00000020) /* Causes signal not to be automatically blocked on entry to signal handler. */ #define SA_NODEFER (0x00000040) /* FIXME: the following constants need to be reviewed */ /* The resulting set is the intersection of the current set and the complement of the signal set pointed to by the argument set. */ #define SIG_BLOCK (1) /* The resulting set is the signal set pointed to by the argument set. */ #define SIG_UNBLOCK (2) /* Causes signal delivery to occur on an alternate stack. */ #define SIG_SETMASK (3) /* FIXME: the following constants need to be reviewed */ /* Process is executing on an alternate signal stack. */ #define SS_ONSTACK (1) /* Alternate signal stack is disabled. */ #define SS_DISABLE (2) /* Minimum stack size for a signal handler. */ /* FIXME */ #define MINSIGSTKSZ (0) /* Default size in bytes for the alternate signal stack. */ /* FIXME */ #define SIGSTKSZ (0) /* signal-specific reasons why the signal was generated */ /* SIGILL */ /* illegal opcode */ #define ILL_ILLOPC (1) /* illegal operand */ #define ILL_ILLOPN (2) /* illegal addressing mode */ #define ILL_ILLADR (3) /* illegal trap */ #define ILL_ILLTRP (4) /* privileged opcode */ #define ILL_PRVOPC (5) /* privileged register */ #define ILL_PRVREG (6) /* coprocessor error */ #define ILL_COPROC (7) /* internal stack error */ #define ILL_BADSTK (8) /* SIGFPE */ /* integer divide by zero */ #define FPE_INTDIV /* integer overflow */ #define FPE_INTOVF /* floating point divide by zero */ #define FPE_FLTDIV /* floating point overflow */ #define FPE_FLTOVF /* floating point underflow */ #define FPE_FLTUND /* floating point inexact result */ #define FPE_FLTRES /* invalid floating point operation */ #define FPE_FLTINV /* subscript out of range */ #define FPE_FLTSUB /* SIGSEGV */ /* address not mapped to object */ #define SEGV_MAPERR /* invalid permissions for mapped object */ #define SEGV_ACCERR /* SIGBUS */ /* invalid address alignment */ #define BUS_ADRALN /* non-existent physical address */ #define BUS_ADRERR /* object specific hardware error */ #define BUS_OBJERR /* SIGTRAP */ /* process breakpoint */ #define TRAP_BRKPT /* process trace trap */ #define TRAP_TRACE /* SIGCHLD */ /* child has exited */ #define CLD_EXITED /* child has terminated abnormally and did not create a core file */ #define CLD_KILLED /* child has terminated abnormally and created a core file */ #define CLD_DUMPED /* traced child has trapped */ #define CLD_TRAPPED /* child has stopped */ #define CLD_STOPPED /* stopped child has continued */ #define CLD_CONTINUED /* SIGPOLL */ /* data input available */ #define POLL_IN /* output buffers available */ #define POLL_OUT /* input message available */ #define POLL_MSG /* I/O error */ #define POLL_ERR /* high priority input available */ #define POLL_PRI /* device disconnected */ #define POLL_HUP /* signal sent by kill() */ #define SI_USER /* signal sent by the sigqueue() */ #define SI_QUEUE /* signal generated by expiration of a timer set by timer_settime() */ #define SI_TIMER /* signal generated by completion of an asynchronous I/O request */ #define SI_ASYNCIO /* signal generated by arrival of a message on an empty message queue */ #define SI_MESGQ /* PROTOTYPES */ void (*bsd_signal(int, void (*)(int)))(int); int kill(pid_t, int); int killpg(pid_t, int); int pthread_kill(pthread_t, int); int pthread_sigmask(int, const sigset_t *, sigset_t *); int raise(int); int sigaction(int, const struct sigaction *, struct sigaction *); int sigaddset(sigset_t *, int); int sigaltstack(const stack_t *, stack_t *); int sigdelset(sigset_t *, int); int sigemptyset(sigset_t *); int sigfillset(sigset_t *); int sighold(int); int sigignore(int); int siginterrupt(int, int); int sigismember(const sigset_t *, int); void (*signal(int, void (*)(int)))(int); int sigpause(int); int sigpending(sigset_t *); int sigprocmask(int, const sigset_t *, sigset_t *); int sigqueue(pid_t, int, const union sigval); int sigrelse(int); void (*sigset(int, void (*)(int)))(int); int sigstack(struct sigstack *ss, struct sigstack *oss); /* LEGACY */ int sigsuspend(const sigset_t *); int sigtimedwait(const sigset_t *, siginfo_t *, const struct timespec *); int sigwait(const sigset_t *set, int *sig); int sigwaitinfo(const sigset_t *, siginfo_t *); /* MACROS */ #endif /* __SIGNAL_H_INCLUDED__ */ /* EOF */