home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / prgramer / unix / emx / test / sig1.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-02  |  973 b   |  59 lines

  1. /* sig1.c (emx+gcc) */
  2.  
  3. /* Expected output: +s-+s--+s+s+s-x */
  4.  
  5. #include <stdio.h>
  6. #include <signal.h>
  7.  
  8. volatile int ack;
  9.  
  10. void handler (int sig)
  11. {
  12.   putchar ('s');
  13.   if (ack)
  14.     signal (sig, SIG_ACK);
  15. }
  16.  
  17. void make_stack (void)
  18. {
  19.   char dummy[50000];
  20.  
  21.   dummy[0] = dummy[1];
  22. }
  23.  
  24. int main (void)
  25. {
  26.   make_stack ();
  27.   if (signal (SIGINT, handler) == SIG_ERR)
  28.     {
  29.       puts ("signal failed");
  30.       return (1);
  31.     }
  32.   ack = 0;
  33.   putchar ('+');
  34.   raise (SIGINT);
  35.   putchar ('-');
  36.   raise (SIGINT);
  37.   putchar ('+');
  38.   signal (SIGINT, SIG_ACK);
  39.   putchar ('-');
  40.   raise (SIGINT);
  41.   putchar ('-');
  42.   raise (SIGINT);
  43.   ack = 1;
  44.   putchar ('+');
  45.   signal (SIGINT, SIG_ACK);
  46.   putchar ('+');
  47.   raise (SIGINT);
  48.   putchar ('+');
  49.   raise (SIGINT);
  50.   signal (SIGINT, SIG_IGN);
  51.   putchar ('-');
  52.   raise (SIGINT);
  53.   signal (SIGINT, SIG_DFL);
  54.   putchar ('x');
  55.   /* signal (SIGINT, SIG_ACK); */
  56.   raise (SIGINT);
  57.   return (0);
  58. }
  59.