select函数使用细节

linux c/c++开发的同志们一定要掌握select函数,因为它简单高效。以下是本人开发中遇到的几个问题。

一、函数原型

int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);

参数解析:

nfds:最大监听fd数,一般是最大文件号加1

readfds:可读文件句柄集合。

writefds:可写文件句柄集合。

exceptfds:异常文件句柄集合。

timeout:NULL表示阻塞,非NULL可精确到微妙级别。

二、高级用途

1、监听句柄的读写事件

2、实现非租塞模型服务器

3、实现线程安全的sleep

三、使用实例

1.监听可读事件

int is_fd_can_read(int fd, long usec){
    struct timeval timeOut;
    bzero(&timeOut,sizeof(timeOut));
    timeOut.tv_sec = usec/1000000;
    timeOut.tv_usec = usec%1000000;
    fd_set rfds;
    FD_ZERO(&rfds);
    FD_SET(fd,&rfds);
    int rv=select(fd+1, &rfds, NULL, NULL, &timeOut);    
    return rv>0?1:0;
}

注意:以上函数在fd取值在0到1152可正常监听可读事件,但是当fd等于1154时FD_SET() 则

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值