Previous Section2.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(intsig, 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(intsig);
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 Section2.8 setjmp.h |
| Table of Contents | Index | |
Next Section
![]() 2.10 stdarg.h |