Interview answers verified by specialists.

Find interview questions and answers on this website:

See right interview answers on 30 common job interview questions

What's a signal? What do I use signals for?

A signal is an exceptional condition that occurs during the execution of your program. It might be the result
of an error in your program, such as a reference to an illegal address in memory; or an error in your program's
data, such as a floating-point divided by 0; or an outside event, such as the user's pressing Ctrl-Break.
The standard library function signal() enables you to specify what action is to be taken on one of these
exceptional conditions (a function that performs that action is called a "signal handler"). The prototype for
signal() is

#include <signal.h>

void (*signal(int num, void (*func)(int)))(int);

which is just about the most complicated declaration you'll see in the C standard library. It is easier to
understand if you define a typedef first. The type sigHandler_t, shown next, is a pointer to a function that
takes an int as its argument and returns a void:

typedef void (*sigHandler_t)(int);

sigHandler_t signal(int num, sigHandler_t func);

signal() is a function that takes an int and a sigHandler_t as its two arguments, and returns a sigHandler_t as its return value. The function passed in as the func argument will be the new signal handler for the
exceptional condition numbered  num. The return value is the previous signal handler for signal num. This value
can be used to restore the previous behavior of a program, after temporarily setting a signal handler. The
possible values for num are system dependent and are listed in signal.h. The possible values for func are any
function in your program, or one of the two specially defined values SIG_DFL or SIG_IGN. The SIG_DFL value
refers to the system's default action, which is usually to halt the program. SIG_IGN means that the signal is

The following line of code, when executed, causes the program containing it to ignore Ctrl-Break keystrokes
unless the signal is changed again. Although the signal numbers are system dependent, the signal number
SIGINT is normally used to refer to an attempt by the user to interrupt the program's execution (Ctrl-C or
Ctrl-Break in DOS):

signal(SIGINT, SIG_IGN);