pselect

#include <sys/select.h>
int pselect(int maxfdp1,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,const struct timespec *tsptr,const sigset_t *sigmask);

返回值:准备就绪的描述符数,若超时则返回0,若出错则返回-1


除以下几点,pselect与select相同:
① 超时值精度
    select的超时值用timeval结构指定,但pselect使用timespec,timespec结构以秒和纳秒表示超时值,而非秒和微妙。如果平台支持这样精细的粒度,那么timespec就提供了更精准的超时时间。
② 信号屏蔽集
    对于pselect可使用一可选择的信号屏蔽字。若sigmask为空,那么在与信号有关的方面,pselect的运行状况和select相同。否则,sigmask指向一信号屏蔽字,在调用pselect时,以原子操作的方式安装该信号屏蔽字。在返回时恢复以前的信号屏蔽字。

**pselect的执行效果:**在调用select的整个过程中,屏蔽sigmask信号集中的信号。

ready = pselect(maxfdp1,&readfds,&writefds,&exceptfds,timeout,&sigmask);

等价于

sigset_t  sigmask;
// 向 sigmask 中添加信号

sigset_t  origmask;
sigprocmask(SIG_SETMASK,&sigmask,&origmask); //屏蔽sigmask,在origmask中保存当前信号屏蔽集

ready = select(maxfdp1,&readfds,&writefds,&exceptfds,timeout); //调用select

sigprocmask(SIG_SETMASK,&origmask,NULL); //将屏蔽信号集设为origmask
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值