I/O复用

什么是I/O复用?

       什么是I/O复用(I/O multiplexing)呢?具体点就是当你编写的程序需要同时处理多个描数字(socket或file或device),你又不知道什么时候应该(比方说有数据可以读了)去操作(读/写)哪个描数字。这时候I/O复用就需要登场了。

      I/O复用是一种让进程预先“警告”内核能力,使得内核一旦发现进程预先告知时指定的一个或多个I/O条件(就是描述符)就绪(可以读/写了),内核就通知进程。linux有3个调用可实现I/O复用:select、poll,epoll。

select

select()系统调用提供了一种实现同步 I/O 多路复用的机制:

函数头文件: #include <sys/select.h>

函数原型:

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

  • nfds:监听的最大的文件描述符的值+1   

readfds    用来检查可读性的一组文件描述字。                                                                                                                            writefds    用来检查可写性的一组文件描述字。                                                                                                                        exceptfds  用来检查是否有异常条件出现的文件描述字。(注:错误不包括在异常条件之内)

  • select函数中需要用到三个fd_set形参,这个结构体到底做什么用的呢
/* The fd_set member is required to be an array of longs.  */
typedef long int __fd_mask;
   
/* Some versions of <linux/posix_types.h> define this macros.  */
#undef  __NFDBITS
/* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
#define __NFDBITS   (8 * (int) sizeof (__fd_mask)) //32
#
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值