The signal header provides a means to handle signals reported during a program's execution.
Macros:
SIG_DFL
SIG_ERR
SIG_IGN
SIGABRT
SIGFPE
SIGILL
SIGINT
SIGSEGV
SIGTERM
Functions:
signal();
raise();
Variables:
typedef sig_atomic_t
The sig_atomic_t type is of type int and is used
as a variable in a signal handler. The SIG_ macros are used with
the signal function to define signal functions.
SIG_DFL |
Default handler. |
SIG_ERR |
Represents a signal error. |
SIG_IGN |
Signal ignore. |
The SIG macros are used to represent a signal number in the
following conditions:
SIGABRT |
Abnormal termination (generated by the abort function). |
SIGFPE |
Floating-point error (error caused by division by zero, invalid operation, etc.). |
SIGILL |
Illegal operation (instruction). |
SIGINT |
Interactive attention signal (such as ctrl-C). |
SIGSEGV |
Invalid access to storage (segment violation, memory violation). |
SIGTERM |
Termination request. |
Declaration:
void (*signal(intsig, void (*func)(int)))(int);
Controls how a signal is handled. sig represents the signal number
compatible with the SIG macros. func is the function to
be called when the signal occurs. If func is SIG_DFL, then the
default handler is called. If func is SIG_IGN, then the
signal is ignored. If func points to a function, then when a signal is
detected the default function is called (SIG_DFL), then the
function is called. The function must take one argument of type
int which represents the signal number. The function may
terminate with return, abort, exit, or
longjmp. When the function terminates execution resumes where it
was interrupted (unless it was a SIGFPE signal in which case the
result is undefined).
If the call to signal is successful, then it returns a pointer to the
previous signal handler for the specified signal type. If the call fails,
then SIG_ERR is returned and errno is set
appropriately.
Declaration
int raise(intsig);
Causes signal sig to be generated. The sig argument is
compatible with the SIG macros.
If the call is successful, zero is returned. Otherwise a nonzero value is returned.
Example:
#include<signal.h> #include<stdio.h> void catch_function(int); int main(void) { if(signal(SIGINT, catch_function)==SIG_ERR) { printf("An error occured while setting a signal handler.\n"); exit(0); } printf("Raising the interactive attention signal.\n"); if(raise(SIGINT)!=0) { printf("Error raising the signal.\n"); exit(0); } printf("Exiting.\n"); return 0; } void catch_function(int signal) { printf("Interactive attention signal caught.\n"); }
The output from the program should be (assuming no errors):
Raising the interactive attention signal. Interactive attention signal caught. Exiting.