www.pudn.com > pthread_examples.rar > sighaveinfo.c
#include#include #include void new_op(int, siginfo_t*, void*); int main(int argc,char**argv) { struct sigaction act; union sigval mysigval; int i; int sig; pid_t pid; char data[10]; memset(data,0,sizeof(data)); for(i=0;i < 5;i++) { data[i] = '2'; } mysigval.sival_ptr = data; sig = atoi(argv[1]); pid = getpid(); sigemptyset(&act.sa_mask); //act.sa_sigaction = new_op;//三参数信号处理函数 act.sa_handler = new_op; act.sa_flags = SA_SIGINFO;//信息传递开关 if(sigaction(sig,&act,NULL) < 0) { printf("install sigal error\n"); } while(1) { sleep(2); printf("wait for the signal\n"); /*int sigqueue(pid_t pid, int sig, const union sigval val)*/ sigqueue(pid, sig, mysigval);//向本进程发送信号,并传递附加信息 } } void new_op(int signum, siginfo_t *info, void *myact)//三参数信号处理函数的实现 { int i; for(i=0;i<10;i++) { printf("%c\n ",(*( (char*)((*info).si_ptr) + i))); } printf("handle signal %d over;\n",signum); }