select函数

#include<sys/select.h>
#include<sys/time.h>
int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set *exceptset,const struct timeval *timeout);

允许进程指示内核等待多个事件中的任何一个发生,并只有在一个或多个事件发生或经历一段指定的时间后才唤醒它.我们可以调用select告知内核对哪些描述符(就读,写或异常条件)感兴趣以及等待多长时间.我们感兴趣的描述符不局限于套接字,任何描述符都可以使用select来测试.

基中timeval有三种可能:
1.永远等待下去:仅在有一个描述符准备好IO时才返回,为此,我们把该参数设置为空指针
2.等待一段固定时间:在有一个描述符准备好IO时返回,但是不超过由该参数所指向的timeval结构中指定的秒数和微秒数
3.根本不等待:检查描述符后立即返回,这称为轮询(polling),这个timeval的秒数和微秒数必须为0

fd_set是一个描述符集

fd_set rset;
FD_ZERO(&rset); /* initiallize the set: all bits off*/
FD_SET(1,&rset); /* turn on bit for fd 1 */
FD_CLR(1,&rset); /* turn off bit for fd 1 */
FD_ISSET(1,&rset); /* is the 1 on in fdset? return a int */
一般fd_set有1024个描述符,描述符是从0开始的,如果对它们不关心,可以把中间三个设置为NULL.

你可能感兴趣的:(select)