

#include <signal.h>
/* This typedef is in <signal.h>. */ -->
typedef void (*_HANDLER)(int);
_HANDLER signal(int signum, _HANDLER handler);
signal defines the action taken when a signal is received by
the program. The signum argument is the number of the signal,
which should be specified as a symbolic signal name. Refer to the
signal names listed in Supported Signals .
The handler argument is the address of the function to be
called when the signal occurs. The handler argument can point
to a user function, or it can specify one of the two symbolic values
SIG_DFL or SIG_IGN. If you specify SIG_IGN, the signal is ignored, if
possible; if you specify SIG_DFL, the default action for the signal is
taken. (Note that for most signals, the default action is program
termination.) Details of what occurs when you specify SIG_DFL or
SIG_IGN are provided in the descriptions of the signals. In addition,
Tables 5.2 and 5.3 summarize default actions and the results of
ignoring signals.
Refer to Handling Signals for a detailed description of how to use
signal.
signal returns the address of the previous handler for the
signal. If the signal was previously ignored, SIG_IGN is returned; if
no action was defined for the signal, SIG_DFL is returned. If the
call to signal cannot be honored (for example, if you specify
SIG_IGN for a signal that cannot be ignored), the special value
SIG_ERR is returned.
signal,
it first restores default signal handling with the following call before it
executes the handler you have defined:
signal(signum, SIG_DFL);Therefore, it is necessary to reissue
signal to handle a
recurrence of the same signal.
#include <lcsignal.h>
#include <float.h>
signal(SIGFPOFL, &overflow_handler);
/* Perform calculation. */
.
.
.
/* This function handles a floating-point overflow */
/* by replacing the result of the computation with */
/* plus or minus DBL_MAX and allowing the */
/* computation to continue. */
/* This example assumes that SIGFPE is not an */
/* OpenEdition-managed signal. */
void overflow_handler(int signum)
{
FPE_t *info;
info = siginfo(); /* Get information about signal. */
if (!info)
/* If no information is available, force */
/* default handling. */
raise(SIGFPOFL);
/* Replace result by appropriate large number. */
if (*info->result.doublev < 0.0)
*info->result.doublev = -DBL_MAX;
else
*info->result.doublev = DBL_MAX;
}
sigaction, cosignal
Copyright (c) 1998 SAS Institute Inc. Cary, NC, USA. All rights reserved.