signal
and sigaction
It's possible to use both the signal
and sigaction
functions within a single program, but you have to be careful because they can interact in slightly strange ways.
The sigaction
function specifies more information than the signal
function, so the return value from signal
cannot express the full range of sigaction
possibilities. Therefore, if you use signal
to save and later reestablish an action, it may not be able to reestablish properly a handler that was established with sigaction
.
To avoid having problems as a result, always use sigaction
to save and restore a handler if your program uses sigaction
at all. Since sigaction
is more general, it can properly save and reestablish any action, regardless of whether it was established originally with signal
or sigaction
.
On some systems if you establish an action with signal
and then examine it with sigaction
, the handler address that you get may not be the same as what you specified with signal
. It may not even be suitable for use as an action argument with signal
. But you can rely on using it as an argument to sigaction
. This problem never happens on the GNU system.
So, you're better off using one or the other of the mechanisms consistently within a single program.
Portability Note: The basic signal
function is a feature of ANSI C, while sigaction
is part of the POSIX.1 standard. If you are concerned about portability to non-POSIX systems, then you should use the signal
function instead.