IO多路转接之select
初识select
系统提供select 函数来实现多路复用输入/输出模型
- select系统调用是用来让程序监视多个文件描述符的状态变化;
- 程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变。
select 函数
函数原型:
#include <sys/select.h>
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *execptfds, struct timeval *timeout);
参数解释:
1. nfds:是需要监视的最大文件描述符值+1;nfds 提高了遍历的效率。
2. rdset,wrset,exset分别对应于需要检测的可读文件描述符的集合、可写文件描述符的集合及异常文件描述符的集合;fd_set 是基于位图实现的结构体;*readfds 是读就绪、*writefds 是写就绪、*exceptfds 是异常就绪;
3. 参数 timeout 为结构 timeval,用来设置 select() 的等待时间。
参数timeout 的取值:
- NULL:表 select() 没有 timeout,select 将一