I/O复用

SELECT 系统调用

nfds是制定被监听的文件描述符的总数,通常被设置为最大文件描述符值+1(因为文件描述符从0开始)

readfds,writefds,execeptfds分别指向可读,可写,异常事件对应的文件描述符;

fd_set结构体:


fd_set结构体只有一个整形数组,该数组的每个元素的每个位存放一个文件描述符;

FD_SETSIZEfd_set能容纳的文件描述符的总量,也是select能同时处理的文件描述符个数;



timeout参数是timeval的结构体指针;

timeval结构体如下:


如果tv_sectv_usec0select立即返回,timeout传值为NULL则一直阻塞;

select返回值:

成功时返回文件描述符的总量,超时时间内没有文件描述符就绪返回0,失败时返回-1

pool系统调用


fdspoolfd结构体指针;




nfds指定监听事件fds的大小;


timeout指定poll超时值,为-1时将永远阻塞,为0立即返回;

poll返回值:

成功时返回文件描述符的总量,超时时间内没有文件描述符就绪返回0,失败时返回-1

epoll系统调用

epoll用一组函数来操作,并且把用户关心的文件描述符上的事件放在内核事件表中,而不像selectpoll每次调用都要传入文件描述符集或事件集;epoll需要一个描述符来唯一标识内核中的事件表;

创建该描述符:


size是时间表的大小;


event是结构体指针;



epoll_data共用体中使用最多的是fd

epoll_ctl成功时返回0失败返回-1并设置errno

epfd是那个创建的标识事件表的文件描述符

epoll_wait函数:

在一段超时时间内等待一组文件描述符上的事件;


epfd同上;events是一个结构体指针,用来存放epfd从事件表中复制的事件信息,该数组用来输出epoll_wait检测到的就绪事件;

selectpoll的数组既传入用户注册的事件,又输出内核检测到的就绪事件;

maxevent指定监听事件的个数,必须大于0

timeout超时时间;

三组IO复用函数的比较


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值