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); 
}