1、头文件
#include <sys/select.h>
#include <sys/types.h>
#include <sys/time.h>
#include <unistd.h>
2、相关函数和宏
int select(int nfds, fs_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
void FD_CLR(int fd, fd_set *set);
int FD_ISSET(int fd, fd_set *set);
void FD_SET(int fd, fd_set *set);
void FD_ZERO(fd_set *set);
3、功能描述
select会一直监视多个文件描述符的状态,直到某个或者某几个文件描述变为可用时返回;或者超时返回。
select函数的参数nfds是所有文件描述符中最大值再加上1;参数timeout是select返回之前等待的最长时间,当timeout结构体中的两个成员变量值都为0时,select函数立即返回。
四个宏的定义如下:
FD_CLR把一个文件描述符从set中删除。
FD_SET把一个文件描述符设置到set中。
FD_ZERO清空set。
FD_ISSET测试某个文件描述符是否在某个set中,此宏可用在select返回后。
4、返回值
如果成功,返回三种set中文件描述符的数量;如果失败,返回-1,这时三种FD_SET和timeout都变为未定义的,所以如果有错误发生,不应该再以它们的值作为判断依据。