www.pudn.com > pthread_examples.rar > sigreceive.c
#include#include #include void new_op(int, siginfo_t*, void*); /* struct sigaction { union { __sighandler_t _sa_handler; void (*_sa_sigaction)(int, struct siginfo *, void *); }_u sigset_t sa_mask; unsigned long sa_flags; void (*sa_restorer)(void); } typedef struct { int si_signo; int si_errno; int si_code; union sigval si_value; } siginfo_t; union sigval { int sival_int; void *sival_ptr; } */ int main(int argc, char**argv) { struct sigaction act; int sig; sig = atoi(argv[1]); sigemptyset(&act.sa_mask); /*设置了SA_SIGINFO标志,表示信号携带的信息可以传递到信号处理函数中*/ act.sa_flags = SA_SIGINFO; /*设定了SA_SIGINFO之后,应该为sa_sigaction指定信号处理函数 而不应该为_sa_handler指定信号处理函数*/ act.sa_sigaction = new_op; //act.sa_handler = new_op; if(sigaction(sig, &act, NULL) < 0) { printf("install sigal error\n"); } while(1) { sleep(2); printf("wait for the signal\n"); } } void new_op(int signum, siginfo_t *info, void *myact) { printf("receive signal %d\n", signum); printf("info->si_signo = %d\n", info->si_signo); printf("info->si_errno = %d\n", info->si_errno); printf("info->si_code = %d\n", info->si_code); printf("info->si_value.sival_int = %d\n", info->si_value.sival_int); sleep(5); printf("new , I am leaving the program ! \n"); exit(0); }