信号通信2.0

//#include < signal.h>
//#include < stdio.h>
//#include < stdlib.h>

void my_func(int sign_no)
{
if(sign_no==SIGINT)

    printf("I have get SIGINT\n");

else if(sign_no==SIGQUIT)

    printf("I have get SIGQUIT\n");

}

int main()
{

printf("Waiting for signal SIGINT or SIGQUIT \n ");

/*注册信号处理函数*/

signal(SIGINT, my_func);

signal(SIGQUIT, my_func);

pause();

exit(0);

}

//#include < signal.h>
//#include < stdio.h>
//#include < stdlib.h>

/自定义信号处理函数/
void my_func(int sign_no)
{

if(sign_no==SIGBUS)
    printf("I have get SIGBUS\n");

}

int main()
{

printf("Waiting for signal SIGBUS \n ");

/*注册信号处理函数*/
signal(SIGBUS,my_func); 
pause();//将进程挂起直到捕捉到信号为止

exit(0);

}

//#include < sys/types.h>
//#include < unistd.h>
//#include < signal.h>
//#include < stdio.h>
//#include < stdlib.h>

void my_func(int signum)
{

printf("If you want to quit,please try SIGQUIT\n");

}

int main()
{

sigset_t set,pendset;

struct sigaction action1,action2;

if(sigemptyset(&set)<0)

    perror("sigemptyset");

if(sigaddset(&set,SIGQUIT)<0)

    perror("sigaddset");

if(sigaddset(&set,SIGINT)<0)

    perror("sigaddset");

if(sigprocmask(SIG_BLOCK,&set,NULL)<0)

    perror("sigprocmask");

else

{

    printf("blocked\n");

    sleep(5);

}

if(sigprocmask(SIG_UNBLOCK,&set,NULL)<0)

    perror("sigprocmask");

else

    printf("unblock\n");

while(1)

{

    if(sigismember(&set,SIGINT))

    {

        sigemptyset(&action1.sa_mask);

        action1.sa_handler=my_func;

        sigaction(SIGINT,&action1,NULL);

    }

    else if(sigismember(&set,SIGQUIT))

    {

        sigemptyset(&action2.sa_mask);

        action2.sa_handler = SIG_DFL;

        sigaction(SIGTERM,&action2,NULL);

    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值