1 #include <signal.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <unistd.h> 5 #include <errno.h> 6 7 #include "test_helpers.h" 8 9 void handler1(int sig) { 10 ERROR_IF(handler, sig, != SIGUSR1); 11 puts("Signal handler1 called!"); 12 } 13 14 void handler2(int sig) { 15 ERROR_IF(handler, sig, != SIGUSR1); 16 puts("Signal handler2 called!"); 17 } 18 19 int main(void) { 20 struct sigaction sa1 = { .sa_handler = handler1 }; 21 struct sigaction sa2 = { .sa_handler = handler2 }; 22 struct sigaction saold = {0}; 23 24 sigemptyset(&sa1.sa_mask); 25 sigemptyset(&sa2.sa_mask); 26 27 int rcode = sigaction(SIGUSR1, &sa1, NULL); 28 ERROR_IF(signal, rcode, != 0); 29 30 puts("Raising..."); 31 32 int raise_status = raise(SIGUSR1); 33 ERROR_IF(raise, raise_status, < 0); 34 35 rcode = sigaction(SIGUSR1, &sa2, &saold); 36 ERROR_IF(signal, rcode, != 0); 37 ERROR_IF(signal, saold.sa_handler, != sa1.sa_handler); 38 39 puts("Raising..."); 40 41 raise_status = raise(SIGUSR1); 42 ERROR_IF(raise, raise_status, < 0); 43 44 puts("Raised."); 45 } 46