贵阳妇科医院网上预约:select函数

来源:百度文库 编辑:九乡新闻网 时间:2024/04/25 23:24:48

select函数及其所需类型被包含在中,此外,要使用它的最后一个时间参数的话,还应当包含

0.select函数一般应当被包含在一个无限循环中,如while(1){... select(...)...}(有限循环也可以,但应该不太常这样用)

1.调用select函数之前,需要先申明一个fd_set类型的变量,这个变量用于记录select函数所关注的文件描述字;

2.申明fd_set变量之后,先对其初始化,也就是全部置零,FD_ZERO(fd_set变量地址);

3.然后将所关心的文件描述字对应于fd_set变量的位置1,FD_SET(文件描述字,fd_set变量地址);(调用select函数之前要进行置位,否则select函数将无事可做,select调用之后也可以置位,这样使得编程更加灵活)

4.调用select函数,此时程序将阻塞于此,直到系统产生“输入”(第二个参数不为NULL)、“输出”(第三个参数不为NULL)、“出错信号”(第四个参数不为NULL),或者时间参数所设定的时长超时(第五个参数不为NULL),select就会返回准备就绪的文件描述字数目或0(超时返回),程序继续执行。

5.接下来的程序中,若被操作的文件描述字是之前调用FD_SET设置过的,那么就用一个if(FD_ISSET(文件描述字))来包裹对这个文件描述字的相应操作,比如read操作,一般情况下这是一个阻塞式的函数调用,但此时由于是在read所需数据已准备好的情况下调用它的,所以read一执行便返回了。

6.随后,由于处于while(1)循环中,又回到了select函数的执行并阻塞起来。

 

select函数的用途总结:用于需对多个阻塞式的文件操作函数进行调用,且这样的操作不应当分先后顺序的情形。如,单进程单线程服务器对多客户端,每个客户端对应一个文件描述符,而对这些客户端的读操作是阻塞的,且不应当分先后顺序的(若此时采用顺序结构编程,当阻塞于等待 用户A write的read操作,用户B的write操作是不被接纳的。),使用select函数,就可以无停顿地对各个用户的请求进行处理了。