Previous Section 2.8 setjmp.h |
| Table of Contents | Index | |
Next Section
2.10 stdarg.h |
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:
Controls how a signal is handled. sig represents the signal number compatible with thevoid (*signal(int
sig, void (*
func)(int)))(int);
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
Causes signal sig to be generated. The sig argument is compatible with theint raise(int
sig);
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.
Previous Section 2.8 setjmp.h |
| Table of Contents | Index | |
Next Section
2.10 stdarg.h |