在所有POSIX兼容的平台上,select函数使我们可以执行I/O多路转换。select 传的参数内容有:
描述符;
描述符的条件;
等待时间;
已经准备好的描述符的总数量;
对于读、写或者异常这三个条件中的每一个,描述符都已经准备好;
'int select(int fd, fd_set restrict readfds, fd_set restrict writefds, fd_set restrict exceptfds, struct timeval restrict tvptr);
其中:tvptr指最长等待时间,有三种情况:永远等待;捕捉到一个信号则返回;根本不等待;
不阻塞select函数的方法:rvptr->tv_sec!=0 || tvptr->tv_usec!=0等待的秒数和微妙数。
readfds, writefds,exceptfds:指向描述符集的指针。可读、科协、异常三种情况的描述符集合,
fd_set数据类型:分配一个这种类型的变量,将这种类型的一个变量值赋给同类型的另一个变量,或对这种类型的变量使用下列4个函数中的一个:
int FD_ISSET(int fd, fd_set* fdset);
void FD_CLR(int fd, fd_set* fdset);
void FD_SET(int fd, fd_set* fdset);
void FD_ZERO(fd_set* fdset);