

bsd_signal - signal handling with BSD semantics
#define _XOPEN_SOURCE #include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t bsd_signal(int signum , sighandler_t handler );
The bsd_signal () function takes the same arguments, and performs the same task, as signal (2).
The difference between the two is that bsd_signal () is guaranteed to provide reliable signal semantics, that is: a) the disposition of the signal is not reset to the default when the handler is invoked; b) delivery of further instances of the signal is blocked while the signal handler is executing; and c) if the handler interrupts a blocking system call, then the system call is automatically restarted. A portable application cannot rely on signal (2) to provide these guarantees.
The bsd_signal () function returns the previous value of the signal handler, or SIG_ERR on error.
Use of bsd_signal () should be avoided; use sigaction (2) instead.
On modern Linux systems, bsd_signal () and signal (2) are equivalent. But on older systems, signal (2) provided unreliable signal semantics; see signal (2) for details.
The use of sighandler_t is a GNU extension; this type is only defined if the _GNU_SOURCE feature test macro is defined.
sigaction (2) signal (2) sysv_signal (3) feature_test_macros (7) signal (7)