信号----与信号处理相关的系统调用---struct sigaction

Linux中信号相关的一个结构体struct sigaction主要在sigaction信号安装和sigqueue信号发送时会用到
该结构位于/usr/include/bits/sigaction.h
在里面可以找到该结构的描述

struct sigaction {
	/* 联合数据结构中的两个元素_sa_handler和_sa_sigaction指定信号关联函数,即用户指定的
	信号处理函数。除了可以是用户自定义的处理函数外,还可以为SIG_DEL(采用缺省的处理方式),
	也可以为SIG_IGN(忽略信号)*/
	union {
	/* 指定的处理函数只有一个参数,即信号值,所以信号不能传递除信号值之外的任何信息 */
	  __sighandler_t _sa_handler;
	/* 指定的信号处理函数带有三个参数,是为实时信号而设的(当然同样支持非实时信号),它指定一个3参数信号处理函数。
	第一个参数为信号值,第三个参数没有使用(posix没有规范使用该参数的标准),第二个参数是指向siginfo结构的指针,
	结构中包含信号携带的数据值*/
	  void (*_sa_sigaction)(int, struct siginfo *, void *);
	} _u;
	/* 指定在信号处理程序执行过程中,哪些信号应当被阻塞。缺省情况下当前信号本身被阻塞,防止信号的嵌套发送,
	除非指定SA_NODEFER或SA_NOMASK标志位。请注意sa_mask指定的信号阻塞的前提条件,是在由sigaction()安装信号的处理
	函数执行过程中由sa_mask指定的信号才被阻塞*/
	sigset_t sa_mask;
	/* sa_flags中包含了许多标志位,包括刚刚提到的SA_DEFEER及SA_NOMASK标志位。另一个比较重要的标志时SIG_INFO,当
	设定了该标志位时,表示信号附带的参数可以被传递到信号处理函数中,因此,应该为_sa_sigaction指定了信号处理函数,
	如果不设置SA_SIGINFO,信号处理函数同样不能得到信号传递过来的数据,在信号处理函数中对这些信息的访问都将导致段错误
	很多文献在阐述该标志位时都认为,如果设置了该标志位,就必须定义三参数信号处理函数。实际不是这样的,验证方法很简单:
	自己实现一个单一参数信号处理函数,并在程序中设置该标志位,可以查看程序的运行结果。实际上,可以把该标志位看成信号
	是否传递参数的开关,如果设置该位࿰
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值