6.11 通过文件描述符来获取信号

6.11 通过文件描述符来获取信号

从内核2.6.22版本开始,Linux提供了另外一种机制来接收信号:通过文件描述符来获取信号即signalfd机制

这个机制和sigwaitinfo非常地类似,都属于同步等待信号的范畴,都需要首先调用sigprocmask将关注的信号屏蔽,以防止被信号处理函数劫走。

不同之处在于,文件描述符方法提供了文件系统的接口,可以通过select、poll和epoll来监控这些文件描述符


signalfd接口的定义如下:

int signalfd(int fd, const sigset_t *mask, int flags);

其中,mask参数是信号集,表示关注信号的集合

这些信号的集合应该在调用signalfd函数之前,先调用sigprocmask函数阻塞这些信号,以防止被信号处理函数劫走。

首次创建时fd参数应该为-1,该函数会创建一个文件描述符,用于读取mask中到来的信号。

如果fd不是-1,则表示是修改操作,一般是修改mask的值,此时fd是之前调用signalfd时返回的值。

第三个参数flags用来控制行为,目前支持的标志位如下。

  • SFD_CLOEXEC:和普通文件的O_CLOEXEC一样,调用exec函数时,文件描述符会被关闭。
  • SFD_NONBLOCK:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值