多路复用select函数
函数介绍
函数原型
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
参数nfds:所有文件描述符的最大值加1
参数readfds/writefds/exceptfds: 读/写/错误 集合
读集合 |
写集合 |
错误集合 |
readfds |
writefds |
exceptfds |
参数timeout: 表示select的等待时间
返回值:文件描述符个数
select函数的执行过程
传递给select函数的参数会告诉内核以下信息:
(1)文件描述符(select函数监视的文件描述符分三类,分别是writefds、readfds和exceptfds)。
(2)每个描述符的状态(是想从一个文件描述符中读或者写,还是关注一个描述符中是否出现异常)。
(3)要等待的时间(可以等待无限长的时间,等待固定的一段时间,或者根本就不等待)。
从select函数返回后,内核会告诉我们以下信息:
(1)对我们的要求已经做好准备的描述符的个数。
(2)对于三种条件哪些描述符已经做好准备(读、写、异常)。