fixed for newer perl
[tridge/junkcode.git] / sigtest.c
1 #include <stdio.h>
2 #include <signal.h>
3 #include <unistd.h>
4
5 static void CatchSignal(int signum,void (*handler)(int ));
6
7 void BlockSignals(int block,int signum)
8 {
9         sigset_t set;
10         sigemptyset(&set);
11         sigaddset(&set,signum);
12         sigprocmask(block?SIG_BLOCK:SIG_UNBLOCK,&set,NULL);
13 }
14
15
16 static void handler(int sig)
17 {
18         BlockSignals(1, sig);
19         sigblock(sigmask(sig));
20         printf("got signal\n");
21 }
22
23 static void CatchSignal(int signum,void (*handler)(int ))
24 {
25         struct sigaction act;
26
27         act.sa_handler = handler;
28         act.sa_flags = SA_RESTART|SA_NODEFER;
29
30         sigemptyset(&act.sa_mask);
31         sigaddset(&act.sa_mask,signum);
32         sigaction(signum,&act,NULL);
33 }
34
35
36 int main(void)
37 {
38         CatchSignal(SIGUSR1, handler);
39
40         while (1) {
41                 sleep(100);
42         }
43         return 0;
44 }