select API的主旨思想
select
),监听该列表中的文件描述符,直到这些描述符中的一个或者多个进行I/O操作时,该函数才返回。
<aside>
💡 select
监听一个列表的文件描述符,直到列表中某个文件描述符进行IO操作时返回
</aside>
参数
nfds
:委托内核检测的最大文件描述符的值 + 1
readfds
:一个文件描述符的集合,监听该集合中的文件描述符是否准备进行读操作
readfds
是一个传入传出参数writefds
:一个文件描述符的集合,监听该集合中的文件描述符是否能够进行写操作
writefds
是一个传入传出参数
exceptfds
:检测发生异常的文件描述符列表timeout
:设置检测的超时时间
timeval结构体:
传入NULL
:设置永久阻塞,直到检测到了文件描述符有变化
tv_sec = 0
, tv_usec = 0
:设置不阻塞
返回值
// 将参数文件描述符fd对应的标志位设置为0
void FD_CLR(int fd, fd_set *set);
// 将参数文件描述符fd对应的标志位设置为1
void FD_SET(int fd, fd_set *set);
// 判断fd对应的标志位是0还是1,返回fd对应的标志位的值,0:返回0; 1:返回1
int FD_ISSET(int fd, fd_set *set);
// fd_set一共有1024 bit, 全部初始化为0
void FD_ZERO(fd_set *set);