打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
select函数

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

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函数,就可以无停顿地对各个用户的请求进行处理了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linuxselect学习笔记(附:监测多个文件描述符状态的例子)
linux select函数详解
NULLIF()函数使用讲解
Linux select函数学习笔记
linux—select详解
Linux网络编程一步一步学
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服