select():此函数的作用是用来检测文件描述符是否已准备就绪。
参数一:numfds – 该参数的值为需要监视的文件描述最大数量加一。
参数二:readfds – 由select函数监视的读文件描述符集。
参数三:writefds – 由select函数监视的写文件描述符集。
参数四:exeptfds – 由select函数监视的异常处理文件描述符集。
参数五:timeout – 设定的检测超时值。为NULL时表示永远等待,直到有文件描述符
就绪。为具体值时如规定时间内没有检测到有描述符准备就绪,就立即返回。
返回值:0 – 超时。
-1 – 出错。
>0 – 成功且表示准被好的文件描述符。
———————————————————————————————————–
用法:
fd_set file_sets;
fd_set tmp_sets;
int fd;
fd = xx_function(); //–xx_function()的返回值是一个文件描述符–//
//—初始化文件描述符集file_sets—//
FD_ZERO(file_sets);
FD_SET(fd, file_sets);
while(1)
{
tmp_sets = file_sets; //–避免重复初始化file_sets–//
/*
select操作后的结果是如果tmp_sets中的文件描述准备就绪则不从tmp_sets中
删除,否则则从tmp_sets中删除。这也是为什么会有tmp_sets = file_sets的原
因。
*/
select(MAX_FD_SETS + 1, &tmp_sets, NULL, NULL,NULL);
for (int fd = 0; fd < MAX_FD_SETS; ++fd)
{
//—对准备就绪的描述符做相关处理—//
if (FD_ISSET(fd, tmp_sets))
{
xx_function(fd);//–处理函数–//
}
}
}
平平淡淡才是真