home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / unix / unixlib_1 / !UnixLib37_src_clib_h_signal < prev    next >
Encoding:
C/C++ Source or Header  |  1996-11-09  |  8.5 KB  |  322 lines

  1. /****************************************************************************
  2.  *
  3.  * $Source: /unixb/home/unixlib/source/unixlib37/src/clib/h/RCS/signal,v $
  4.  * $Date: 1996/10/30 21:58:58 $
  5.  * $Revision: 1.3 $
  6.  * $State: Rel $
  7.  * $Author: unixlib $
  8.  *
  9.  * $Log: signal,v $
  10.  * Revision 1.3  1996/10/30 21:58:58  unixlib
  11.  * Massive changes made by Nick Burret and Peter Burwood.
  12.  *
  13.  * Revision 1.2  1996/05/06 09:01:33  unixlib
  14.  * Updates to sources made by Nick Burrett, Peter Burwood and Simon Callan.
  15.  * Saved for 3.7a release.
  16.  *
  17.  * Revision 1.1  1996/04/19 21:02:57  simon
  18.  * Initial revision
  19.  *
  20.  ***************************************************************************/
  21.  
  22. /* ANSI, POSIX and BSD signal handling.  */
  23.  
  24. #ifndef __SIGNAL_H
  25. #define __SIGNAL_H
  26.  
  27. #ifndef __UNIXLIB_TYPES_H
  28. #include <unixlib/types.h>
  29. #endif
  30. #ifndef __STDDEF_H
  31. #include <stddef.h>
  32. #endif
  33.  
  34. #ifdef __cplusplus
  35. extern "C" {
  36. #endif
  37.  
  38. /* Hangup (POSIX).  */
  39. #define SIGHUP    1
  40. /* Interrupt (ANSI).  */
  41. #define SIGINT    2
  42. /* Quit (POSIX).  */
  43. #define SIGQUIT 3
  44. /* Illegal instruction (ANSI).  */
  45. #define SIGILL    4
  46. /* Abort (ANSI).  */
  47. #define SIGABRT SIGIOT
  48. /* Trace trap (POSIX).  */
  49. #define SIGTRAP 5
  50. /* IOT trap (4.2 BSD).  */
  51. #define SIGIOT    6
  52. /* EMT trap (4.2 BSD).  */
  53. #define SIGEMT    7
  54. /* Floating-point exception (ANSI).  */
  55. #define SIGFPE    8
  56. /* Kill, unblockable (POSIX).  */
  57. #define SIGKILL 9
  58. /* Bus error (4.2 BSD).  */
  59. #define SIGBUS    10
  60. /* Segmentation violation (ANSI).  */
  61. #define SIGSEGV 11
  62. /* Bad argument to system call (4.2 BSD).  */
  63. #define SIGSYS    12
  64. /* Broken pipe (POSIX).  */
  65. #define SIGPIPE 13
  66. /* Alarm clock (POSIX).  */
  67. #define SIGALRM 14
  68. /* Termination (ANSI).  */
  69. #define SIGTERM 15
  70. /* Urgent, or out-of-band data arrives on a socket (4.2 BSD). */
  71. #define SIGURG 16
  72. /* Stop, unblockable (POSIX).  */
  73. #define SIGSTOP 17
  74. /* Keyboard stop, Ctrl-Z (POSIX).  */
  75. #define SIGTSTP 18
  76. /* Continue (POSIX).  */
  77. #define SIGCONT 19
  78. /* Child process has terminated or stopped (POSIX).  */
  79. #define SIGCHLD 20
  80. /* Obsolete name for SIGCHLD (System V).  */
  81. #define SIGCLD SIGCHLD
  82. /* Background read from tty (POSIX).  */
  83. #define SIGTTIN 21
  84. /* Backgroung write to tty (POSIX).  */
  85. #define SIGTTOU 22
  86. /* File descriptor is ready to perform input or output (4.2 BSD).  */
  87. #define SIGIO 23
  88. /* Similar to SIGIO (System V). */
  89. #define SIGPOLL SIGIO
  90. /* CPU time limit exceeded (4.2 BSD).  */
  91. #define SIGXCPU 24
  92. /* File size limit exceeded (4.2 BSD).  */
  93. #define SIGXFSZ 25
  94. /* Virtual alarm clock (4.2 BSD).  */
  95. #define SIGVTALRM 26
  96. /* Profiling alarm clock (4.2 BSD).  */
  97. #define SIGPROF 27
  98. /* Window size change (4.3 BSD)  */
  99. #define SIGWINCH 28
  100. /* Information request (4.4 BSD). */
  101. #define SIGINFO 29
  102. /* User-defined signal 1 (POSIX).  */
  103. #define SIGUSR1 30
  104. /* User-defined signal 2 (POSIX).  */
  105. #define SIGUSR2 31
  106. /* Resource lost.  */
  107. #define SIGLOST 32
  108. /* RISC OS error.  */
  109. #define SIGERR    33
  110.  
  111. /* Total number of signals defined. This should be one greater than
  112.    the largest defined signal number.  */
  113. #define _NSIG 34
  114. #define NSIG _NSIG
  115.  
  116. /* Type of a signal handler.  */
  117. typedef void (*__sighandler_t)(int);
  118. typedef __sighandler_t sighandler_t;
  119.  
  120. extern    int    sys_nsig;        /* = NSIG */
  121. extern    char    *sys_siglist[NSIG];    /* signal messages */
  122.  
  123. /* Fake signal functions, based on the BSD versions.  */
  124.  
  125. /* Error return.  */
  126. #define SIG_ERR ((__sighandler_t) -1)
  127.  
  128. /* Default action.  */
  129. #define SIG_DFL ((__sighandler_t) 0)
  130.  
  131. /* Ignore signal.  */
  132. #define SIG_IGN ((__sighandler_t) 1)
  133.  
  134. extern __sighandler_t signal (int sig, __sighandler_t handler);
  135.  
  136. /* Send signal 'sig' to process number 'pid'.  If pid is zero,
  137.    send sig to all processes in the current process's process group.
  138.    If pid is < -1, send sig to all processes in process group -pid.  */
  139. extern int kill (__pid_t pid, int sig);
  140.  
  141. /* Send signal 'sig' to all processes in process group 'pgrp'.
  142.    If pgrp is zero, send sig to all processes in the current
  143.    process's process group.  */
  144. extern int killpg (__pid_t pgrp, int sig);
  145.  
  146. /* Raise signal sig.  */
  147. extern int raise (int sig);
  148.  
  149. /* Print a message describing the meaning of the given signal number.  */
  150. extern void psignal (int sig, const char *s);
  151.  
  152.  
  153. /* BSD signal functions.  */
  154.  
  155. /* Block signals in mask, returning the old mask.  */
  156. extern int sigblock (int mask);
  157.  
  158. /* Set the mask of blocked signals to mask, return the old mask.  */
  159. extern int sigsetmask (int mask);
  160.  
  161. /* Set the mask of blocked signals to mask, wait for a signal
  162.    to arrive, and then restore the mask.  */
  163. extern int sigpause (int mask);
  164.  
  165. typedef int __sig_atomic_t;
  166. #define sig_atomic_t __sig_atomic_t
  167.  
  168. /* POSIX signal functions.  */
  169.  
  170. /* Don't rely on sigset_t remaining an unsigned long. It's usage
  171.    could soon change into the structure form below. Use the
  172.    signal functions below to manipulate its value.  */
  173.  
  174. typedef unsigned long int __sigset_t;
  175. #define sigset_t   __sigset_t
  176.  
  177. #if 0
  178. typedef struct __usigset
  179. {
  180.   unsigned int sig[NSIG] : 1;
  181. } __sigset_t;
  182. #endif
  183.  
  184. /* Structure describing the action to be taken when a signal arrives.  */
  185. struct sigaction
  186.   {
  187.     /* Signal handler.  */
  188.     __sighandler_t sa_handler;
  189.     /* Additional set of signals to be blocked.  */
  190.     __sigset_t sa_mask;
  191.     /* Special flags.  */
  192.     int sa_flags;
  193.   };
  194.  
  195. /* Bits in sa_flags.  */
  196.  
  197. /* Take signal on signal stack.  */
  198. #define    SA_ONSTACK    0x1
  199. /* Don't restart syscall on signal return.  */
  200. #define    SA_RESTART    0x2
  201. /* Disable alternate signal stack.  */
  202. #define    SA_DISABLE    0x4
  203. /* Don't send SIGCHLD when children stop.  */
  204. #define    SA_NOCLDSTOP    0x8
  205.  
  206.  
  207. /* Values for the HOW argument to `sigprocmask'.  */
  208.  
  209. /* Block signals.  */
  210. #define    SIG_BLOCK    1
  211. /* Unblock signals.  */
  212. #define    SIG_UNBLOCK    2
  213. /* Set the set of blocked signals.  */
  214. #define    SIG_SETMASK    3
  215.  
  216. /* Currently in an optimised state but this could soon change.  */
  217. #define sigmask(sig) (((__sigset_t) 1) << ((sig) - 1))
  218. #define sigemptyset(set) ((*(set) = (__sigset_t) 0), 0)
  219. #define sigfillset(set) ((*(set) = ~(__sigset_t) 0), 0)
  220.  
  221. /* Clear all signals from set.  */
  222. extern int (sigemptyset) (__sigset_t *set);
  223.  
  224. /* Set all signals in set.  */
  225. extern int (sigfillset) (__sigset_t *set);
  226.  
  227. extern sigset_t (sigmask) (int sig);
  228.  
  229. /* Add signo to set.  */
  230. extern int sigaddset (__sigset_t *set, int signo);
  231.  
  232. /* Remove signo from set.  */
  233. extern int sigdelset (__sigset_t *set, int signo);
  234.  
  235. /* Remove 1 if signo is in set, 0 if not.  */
  236. extern int sigismember (const __sigset_t *set, int signo);
  237.  
  238. /* Get and/or change the set of blocked signals.  */
  239. extern int sigprocmask (int how, const __sigset_t *set, __sigset_t *oldset);
  240.  
  241. /* Change the set of blocked signals,
  242.    wait until a signal arrives, and restore the set of blocked signals.  */
  243. extern int sigsuspend (const __sigset_t *set);
  244.  
  245. /* Get and/or set the action for signal sig.  */
  246. extern int sigaction (int sig, const struct sigaction *act,
  247.                         struct sigaction *oldact);
  248.  
  249. /* Put in set all signals that are blocked and waiting to be delivered.  */
  250. extern int sigpending (__sigset_t *set);
  251.  
  252. /* BSD signal handling functionality.  */
  253. #if 0
  254. struct sigvec
  255. {
  256.   /* Signal handler.  */
  257.   sighandler_t sv_handler;
  258.   /* Mask of signals to be blocked.  */
  259.   int sv_mask;
  260.   /* Flags.  */
  261.   int sv_flags;
  262. /* 4.2 BSD compatibility.  */
  263. #define sv_onstack sv_flags
  264. };
  265.  
  266. /* Bits in sv_flags.  */
  267.  
  268. /* Take the signal on the signal stack. */
  269. #define SV_ONSTACK 1
  270. /* Do not restart system calls.  */
  271. #define SV_INTERRUPT 2
  272. /* Reset handler to SIG_DFL on receipt.  */
  273. #define SV_RESETHAND 4
  274.  
  275. extern int sigvec (int sig, const struct sigvec *vec, struct sigvec *ovec);
  276.  
  277. /* If interrupt is nonzero, make signal sig interrupt system calls
  278.    (causing them to fail with EINTR); if interrupt is zero, make
  279.    system calls be restarted after signal sig.  */
  280. extern int siginterrupt (int sig, int interrupt);
  281. #endif
  282.  
  283. /* Signal stack structure (BSD style).  */
  284. struct sigstack
  285.   {
  286.     /* Signal stack pointer.  */
  287.     void *ss_sp;
  288.     /* Non zero if executing on this stack.  */
  289.     int ss_onstack;
  290.   };
  291.  
  292. /* Run signal handlers on the stack specified by 'ss' (if not NULL).
  293.    The old status is returned in oss (if not NULL).  */
  294. extern int sigstack (const struct sigstack *ss, struct sigstack *oss);
  295.  
  296. /* Signal stack structure (POSIX alternative interface).  */
  297. struct sigaltstack
  298.   {
  299.     void *ss_sp;
  300.     size_t ss_size;
  301.     int ss_flags;
  302.   };
  303.  
  304. extern int sigaltstack (const struct sigaltstack *ss,
  305.                           struct sigaltstack *oss);
  306.  
  307. /* Signal stack constants.  */
  308.  
  309. /* The recommended signal stack size for a signal handler.  */
  310. #define SIGSTKSZ 4096
  311.  
  312. /* The absolute safe minimum signal stack size
  313.    for running signal handlers in.  */
  314.  
  315. #define MINSIGSTKSZ 2048
  316.  
  317. #ifdef __cplusplus
  318.     }
  319. #endif
  320.  
  321. #endif
  322.