void (*signal( int sig, void (*handler) (int))) (int);
Sets the error handler for signal sig
. The signal handler can be set so that default handling will occur, signal is ignored, or a user-defined function is called.
When signal handler is set to a function and a signal occurs, it is implementation defined whether signal(sig, SIG_DFL) will be executed immediately before the start of signal handler. Also, the implementation can prevent some implementation-defined set of signals from occurring while the signal handler runs.
[edit] Parameters sig - the signal to set the signal handler to. It can be an implementation-defined value or one of the following values: handler - the signal handler. This must be one of the following:Previous signal handler on success or SIG_ERR on failure (setting a signal handler can be disabled on some implementations).
[edit] Signal handlerThe following limitations are imposed on the user-defined function that is installed as a signal handler.
If the user defined function returns when handling SIGFPE, SIGILL or SIGSEGV, the behavior is undefined.
If the signal handler is called as a result of abort or raise, the behavior is undefined if the signal handler calls raise.
If the signal handler is called NOT as a result of abort or raise (in other words, the signal handler is asynchronous), the behavior is undefined if
signal
with the first argument being the number of the signal currently handled (async handler can re-register itself, but not other signals).<stdatomic.h>
if the atomic arguments are lock-freeOn entry to the signal handler, the state of the floating-point environment and the values of all objects is unspecified, except for
On return from a signal handler, the value of any object modified by the signal handler that is not volatile sig_atomic_t or lock-free atomic(since C11) is undefined.
The behavior is undefined if signal is used in a multithreaded program. It is not required to be thread-safe.
[edit] NotesPOSIX requires that signal
is thread-safe, and specifies a list of async-signal-safe library functions that may be called from any signal handler.
Besides abort
and raise
, POSIX specifies that kill
, pthread_kill
, and sigqueue
generate synchronous signals.
POSIX recommends sigaction
instead of signal
, due to its underspecified behavior and significant implementation variations, regarding signal delivery while a signal handler is executed.
#include <signal.h> #include <stdio.h> volatile sig_atomic_t gSignalStatus; void signal_handler(int signal) { gSignalStatus = signal; } int main(void) { signal(SIGINT, signal_handler); printf("SignalValue: %d\n", gSignalStatus); printf("Sending signal: %d\n", SIGINT); raise(SIGINT); printf("SignalValue: %d\n", gSignalStatus); }
Output:
SignalValue: 0 Sending signal: 2 SignalValue: 2[edit] References
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4