C library function - signal()
Description
The C library function void (*signal(int sig, void (*func)(int)))(int) sets a function to handle signal ie. a signal handler with signal number sig
Declaration
Following is the declaration for signal() function.
void (*signal(int sig, void (*func)(int)))(int)
Parameters
sig -- This is the signal number to which a handling function is set. Folloing are few important standard signal numbers:
| macro | signal |
|---|---|
| SIGABRT | (Signal Abort) Abnormal termination, such as is initiated by the function. |
| SIGFPE | (Signal Floating-Point Exception) Erroneous arithmetic operation, such as zero divide or an operation resulting in overflow (not necessarily with a floating-point operation). |
| SIGILL | (Signal Illegal Instruction) Invalid function image, such as an illegal instruction. This is generally due to a corruption in the code or to an attempt to execute data. |
| SIGINT | (Signal Interrupt) Interactive attention signal. Generally generated by the application user. |
| SIGSEGV | (Signal Segmentation Violation) Invalid access to storage: When a program tries to read or write outside the memory it is allocated for it. |
| SIGTERM | (Signal Terminate) Termination request sent to program. |
func -- This is a pointer to a function. This can be a function defined by the programmer or one of the following predefined functions:
| SIG_DFL | Default handling: The signal is handled by the default action for that particular signal. |
| SIG_IGN | Ignore Signal: The signal is ignored. |
Return Value
This function returns the previous value of the signal handler, or SIG_ERR on error.
Example
The following example shows the usage of signal() function.
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
void sighandler(int);
int main()
{
signal(SIGINT, sighandler);
while(1)
{
printf("Going to sleep for a second...\n");
sleep(1);
}
return(0);
}
void sighandler(int signum)
{
printf("Caught signal %d, coming out...\n", signum);
exit(1);
}
Let us compile and run the above program, this will produce the following result and program will go in infinite loop. To come out of the program we used CTRL + C keys.
Going to sleep for a second... Going to sleep for a second... Going to sleep for a second... Going to sleep for a second... Going to sleep for a second... Caught signal 2, coming out...