Linux系统编程之信号集

#include "apue.h"

static void
sig_quit(int signo)
{
	printf("caught SIGQUIT\n");
	if (signal(SIGQUIT, SIG_DFL) == SIG_ERR)
		err_sys("can't reset SIGQUIT");
}

int
main(void)
{
	sigset_t	newmask, oldmask, pendmask; //设置三个信号集备用

	if (signal(SIGQUIT, sig_quit) == SIG_ERR)//捕捉SIGQUIT信号
		err_sys("can't catch SIGQUIT");

	
	sigemptyset(&newmask);	//清空信号集
	sigaddset(&newmask, SIGQUIT);//添加一个信号集
	if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)//阻塞SIGQUIT信号
		err_sys("SIG_BLOCK error");

	sleep(5);	/* SIGQUIT 继续等待 */

	if (sigpending(&pendmask) < 0)	//查看未决的信号集,pendmaks为传出参数
		err_sys("sigpending error");
	if (sigismember(&pendmask, SIGQUIT))//判断未决信号是否存在
		printf("\nSIGQUIT pending\n");

	/*
	 * 以上代码运行完毕之后,解除对SIGQUIT屏蔽
	 */
	if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
		err_sys("SIG_SETMASK error");
	printf("SIGQUIT unblocked\n");

	sleep(5);	
	exit(0);
}

sigset_t:自定义信号集
sigemptyset:清空信号集
sigaddset:添加信号集
sigdelset:删除信号集
sigprocmake:设置信号屏蔽字
sigfillset:全部置为1
sigismember:判断一个信号是否存在,1为是,0为否。
sigpending:查看未决信号集

首先设置自定义信号集,然后清空信号集,在将自定义信号集添加进去,最后用sigprocmake选择阻塞或者接触阻塞信号集。

sigpending和sigismember一般组合使用,用来判断一个未决信号是否存在,注意未决信号,首先需要产生信号,测试时需要留一定时间键入在之前屏蔽的信号集!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值