1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#include <signal.h>
#include <stdlib.h>
volatile int dummy;
typedef void (*sighandler_t)(int sig);
sighandler_t old_handler;
int foo(void)
{
return dummy;
}
void bar(int n)
{
dummy = n;
}
void sighandler(int sig)
{
bar(sig);
if (old_handler != SIG_DFL)
old_handler(sig);
}
int main(int argc, char *argv[])
{
int sig = SIGUSR1;
if (argc > 1)
sig = atoi(argv[1]);
foo();
old_handler = signal(sig, sighandler);
raise(sig);
foo();
return 0;
}
|