Catching Signals in 'C'

Kartik Subbarao subbarao at phoenix.Princeton.EDU
Sat Sep 29 01:16:23 AEST 1990


In article <2901 at idunno.Princeton.EDU> pfalstad at bow.Princeton.EDU (Paul John Falstad) writes:
>In article <1990Sep28.120043.17628 at NCoast.ORG>, ramsey at NCoast.ORG (Cedric Ramsey) writes:
>|> Hello peoplekind. I have a question about the behavior of the
>|> signal function. Firstly, I want to trap the control-c, break,
>|> and other interrupt keys the user may use to stop a program.
>|> I did this by ;
>|> 
>|> main()
>|> {
>|>   signal (SIGINT, (*handler1) ());
>|>   signal (SIGQUIT, (*handler2) ());
>|>   ... 
>|> }
>|> 
>|> 
>|> But, when I type a control-c the program handles the signal as
>|> expected; however, when I type the control-c a second time the program 
>|> doesn't catch it and simply exits. 
>
>I quote from K&R, p. 255:
>
>"When a signal 'sig' subsequently occurs, the signal is __restored to its
>default behavior__; then the signal-handler is called, as if by (*handler)(sig)."

Ahh... But Paul, don't we want to give him the answer to his question? Too many
times K & R has been quoted...and yet no real solutions are given.

>
>The signal handler should reinstall itself before returning. signal() 
>apparently does not act this way in my implementation (SunOS)...  Fortunately.

But programming should be PORTABLE, should it not :-)

A solution is suggested in "UNIX programming", by some author whom I've 
forgotten (a Howard SAMS publication).

What you should put in your signal handlers (*handler1), (*handler2),
is a simple 
signal(SIGINT, SIG_DFL); 
/* replace SIGINT by whatever signal you wish to trap */

This will restore the signal to previous status.

>-- 
>Here is the address to complain to:
>pfalstad at phoenix.princeton.edu PLink:HYPNOS GEnie:P.FALSTAD CIS: 70016,1355
>That address again,
>sync at thumper.princeton.edu PLink:OHS738 GEnie:OHS738 CIS: 4128 143 1234 937

Or a simple "F" to alt.dev.null :-)


			-Kartik



(I need a new .signature -- any suggestions?)
subbarao@{phoenix or gauguin}.Princeton.EDU -|Internet
kartik at silvertone.Princeton.EDU (NeXT mail)       -|	
SUBBARAO at PUCC.BITNET			          - Bitnet



More information about the Comp.lang.c mailing list