www.pudn.com > pthread_examples.rar > sigsem.c


#include "signal.h" 
#include "unistd.h" 
 
static void my_op(int); 
 
main() 
{ 
	sigset_t new_mask,old_mask,pending_mask; 
	struct sigaction act; 
 
	sigemptyset(&act.sa_mask); 
	act.sa_flags     = SA_SIGINFO; 
	act.sa_sigaction = (void*)my_op; 
	if(sigaction(SIGRTMIN+10, &act, NULL)) 
	{ 
		printf("install signal SIGRTMIN+10 error\n"); 
	} 
 
	sigemptyset(&new_mask); 
	sigaddset(&new_mask,SIGRTMIN+10); 
	if(sigprocmask(SIG_BLOCK, &new_mask, &old_mask)) 
	{ 
		printf("block signal SIGRTMIN+10 error\n"); 
	} 
 
	sleep(10);	 
	printf("now begin to get pending mask and unblock SIGRTMIN+10\n"); 
	if(sigpending(&pending_mask)<0) 
	{ 
		printf("get pending mask error\n"); 
	} 
	if(sigismember(&pending_mask,SIGRTMIN+10)) 
	{ 
		printf("signal SIGRTMIN+10 is pending\n"); 
	} 
 
	if(sigprocmask(SIG_SETMASK,&old_mask,NULL)<0) 
	{ 
		printf("unblock signal error\n"); 
	} 
	printf("signal unblocked\n"); 
 
	sleep(10); 
} 
static void my_op(int signum) 
{ 
	printf("receive signal %d \n",signum); 
}