4.6 Nonlocal jumps  -< ANSI C Rationale  -> 4.8 Variable Arguments        Index 

4.7  Signal Handling  <signal.h>

This facility has been retained from the Base Document since the Committee felt it important to provide some standard mechanism for dealing with exceptional program conditions.  Thus a subset of the signals defined in UNIX were retained in the Standard, along with the basic mechanisms of declaring signal handlers and (with adaptations, see §4.7.2.1) raising signals.  For a discussion of the problems created by including signals, see §2.2.3

The signal machinery contains many misnomers: SIGFPE, SIGILL, and SIGSEGV have their roots in PDP-11 hardware terminology, but the names are too entrenched to change.  (The occurrence of SIGFPE, for instance, does not necessarily indicate a floating-point error.) A conforming implementation is not required to field any hardware interrupts. 

The Committee has reserved the space of names beginning with SIG to permit implementations to add local names to <signal.h> This implies that such names should not be otherwise used in a C source file which includes <signal.h>

4.7.1  Specify signal handling

4.7.1.1  The signal function

When a signal occurs the normal flow of control of a program is interrupted.  If a signal occurs that is being trapped by a signal handler, that handler is invoked.  When it is finished, execution continues at the point at which the signal occurred.  This arrangement could cause problems if the signal handler invokes a library function that was being executed at the time of the signal.  Since library functions are not guaranteed to be re-entrant, they should not be called from a signal handler that returns.  (See §2.2.3.)  A specific exception to this rule has been granted for calls to signal from within the signal handler; otherwise, the handler could not reliably reset the signal. 

The specification that some signals may be effectively set to SIG_IGN instead of SIG_DFL at program startup allows programs under UNIX systems to inherit this effective setting from parent processes. 

For performance reasons, UNIX does not reset SIGILL to default handling when the handler is called (usually to emulate missing instructions).  This treatment is sanctioned by specifying that whether reset occurs for SIGILL is implementation-defined

4.7.2  Send signal

4.7.2.1  The raise function

The function raise replaces the Base Document's kill function.  The latter has an extra argument which refers to the ``process ID''  affected by the signal.  Since the execution model of the Standard does not deal with multi-processing, the Committee deemed it preferable to introduce a function which requires no (dummy) process argument.  The Committee anticipates that IEEE 1003 will wish to standardize the kill function in the POSIX specification. 
4.6 Nonlocal jumps  -< ANSI C Rationale  -> 4.8 Variable Arguments        Index