home *** CD-ROM | disk | FTP | other *** search
- /* sig1.c (emx+gcc) */
-
- /* Expected output: +s-+s--+s+s+s-x */
-
- #include <stdio.h>
- #include <signal.h>
-
- volatile int ack;
-
- void handler (int sig)
- {
- putchar ('s');
- if (ack)
- signal (sig, SIG_ACK);
- }
-
- void make_stack (void)
- {
- char dummy[50000];
-
- dummy[0] = dummy[1];
- }
-
- int main (void)
- {
- make_stack ();
- if (signal (SIGINT, handler) == SIG_ERR)
- {
- puts ("signal failed");
- return (1);
- }
- ack = 0;
- putchar ('+');
- raise (SIGINT);
- putchar ('-');
- raise (SIGINT);
- putchar ('+');
- signal (SIGINT, SIG_ACK);
- putchar ('-');
- raise (SIGINT);
- putchar ('-');
- raise (SIGINT);
- ack = 1;
- putchar ('+');
- signal (SIGINT, SIG_ACK);
- putchar ('+');
- raise (SIGINT);
- putchar ('+');
- raise (SIGINT);
- signal (SIGINT, SIG_IGN);
- putchar ('-');
- raise (SIGINT);
- signal (SIGINT, SIG_DFL);
- putchar ('x');
- /* signal (SIGINT, SIG_ACK); */
- raise (SIGINT);
- return (0);
- }
-