Ejemplo n.º 1
0
Sigfunc_rt *
Signal_rt(int signo, Sigfunc_rt *func)
{
	Sigfunc_rt	*sigfunc;

	if ( (sigfunc = signal_rt(signo, func)) == (Sigfunc_rt *) SIG_ERR)
		err_sys("signal_rt error");
	return(sigfunc);
}
Ejemplo n.º 2
0
int main(int argc, char const *argv[])
{
    int i,j;
    pid_t pid;
    sigset_t newset;
    union sigval val;

    printf("SIGRTMIN =%d,SIGRTMAX= %d\n",(int)SIGRTMIN,(int)SIGRTMAX);

    if (0 ==(pid = fork()))
    {
        sigemptyset(&newset);
        sigaddset(&newset,SIGRTMAX);
        sigaddset(&newset,SIGRTMAX-1);
        sigaddset(&newset,SIGRTMAX-2);
        sigprocmask(SIG_BLOCK,&newset,NULL);

        signal_rt(SIGRTMAX,sig_rt,&newset);
        signal_rt(SIGRTMAX-1,sig_rt,&newset);
        signal_rt(SIGRTMAX-2,sig_rt,&newset);

        printf("child sleep 6s------\n");
        sleep(6);
        sigprocmask(SIG_UNBLOCK,&newset,NULL);
        printf("child sleep 3s------\n");
        sleep(3);
        exit(0);
    }
    printf("father sleep 3s------\n");
    sleep(3);
    for (i = SIGRTMAX; i >= SIGRTMAX-2; i--)
    {
        for (j = 0; j <=2; ++j)
        {
            val.sival_int =j;
            sigqueue(pid,i,val);
            printf("send signal %d,val=%d\n", i,j);
        }
    }
    return 0;
}
Ejemplo n.º 3
0
int main(int argc,char **argv)
{
	int i,j;
	pid_t pid;
	sigset_t newset;
	union sigval val;


	printf("SIGRTMIN = %d,SIGRTMAX = %d\n",(int) SIGRTMIN,(int )SIGRTMAX );

	if((pid=Fork())==0)
	{
		Sigemptyset(&newset);
		Sigaddset(&newset,SIGRTMAX);
		Sigaddset(&newset,SIGRTMAX-1);
		Sigaddset(&newset,SIGRTMAX-2);
		Sigprocmask(SIG_BLOCK,&newset,NULL);

		Signal_rt(SIGRTMAX,sig_rt);
		Signal_rt(SIGRTMAX-1,sig_rt);
		signal_rt(SIGRTMAX-2,sig_rt);

		sleep(6);

		Sigprocmask(SIG_UNBLOCK,&newset,NULL);
		sleep(3);
		exit(0);

	}

	sleep(3);
	for(i=SIGRTMAX;i>=SIGRTMAX-2;i--)
	{
		for(j=0;j<=2;j++)
		{
			val.sival_int=j;
			Sigqueue(pid,i,val);
			printf("sent signal %d, val= %d\n",i,j);


		}
	}
	exit(0);


}