NAME
bsd_signal — simplified signal facilities
SYNOPSIS
#include <signal.h>
void (*bsd_signal(int sig, void (*func)(int)))(int);
DESCRIPTION
The
bsd_signal()
function provides a partially compatible interface for programs
written to historical system interfaces (see
APPLICATION USAGE
below).
The function call
bsd_signal(sig,func)
has an effect as if implemented as:
void (*bsd_signal(int sig, void (*func)(int)))(int)
{
struct sigaction act, oact;
act.sa_handler = func;
act.sa_flags = SA_RESTART;
sigemptyset(&act.sa_mask);
sigaddset(&act.sa_mask, sig);
if (sigaction(sig, &act, &oact) == -1)
return(SIG_ERR);
return(oact.sa_handler);
}
The handler function should be declared:
where
sig
is the signal number. The behaviour is undefined if
func
is a function that takes more than one argument, or an argument of a
different type.
RETURN VALUE
Upon successful completion,
bsd_signal()
returns the previous action for
sig.
Otherwise, SIG_ERR is returned and
errno
is set to indicate the error.
ERRORS
Refer to
sigaction().
APPLICATION USAGE
This function is a direct replacement for the BSD
signal()
function for simple applications that are installing a single-argument
signal handler function. If a BSD signal handler function is being
installed that expects more than one argument, the application has to be
modified to use
sigaction().
The
bsd_signal()
function differs from
signal()
in that the SA_RESTART flag is set and the SA_RESETHAND will be clear
when
bsd_signal()
is used. The state of these flags is not specified for
signal().