/* sigdemo3.c * purpose: show answers to signal questions * question1: does the handler stay in effect after a signal arrives? * question2: what if a signalX arrives while handling signalX? * question3: what if a signalX arrives while handling signalY? * question4: what happens to read() when a signal arrives? */ #include #include #define INPUTLEN 100 main(int ac, char *av[]) { void inthandler(int); void quithandler(int); char input[INPUTLEN]; int nchars; signal( SIGINT, inthandler ); /* set handler */ signal( SIGQUIT, quithandler ); /* set handler */ do { printf("\nType a message\n"); nchars = read(0, input, (INPUTLEN-1)); if ( nchars == -1 ) perror("read returned an error"); else { input[nchars] = '\0'; printf("You typed: %s", input); } } while( strncmp( input , "quit" , 4 ) != 0 ); } void inthandler(int s) { printf(" Received signal %d .. waiting\n", s ); sleep(2); printf(" Leaving inthandler \n"); } void quithandler(int s) { printf(" Received signal %d .. waiting\n", s ); sleep(3); printf(" Leaving quithandler \n"); }