select()机制中提供一fd_set的数据结构,实际上是一long类型的数组,每一个数组元素都能与一打开的文件句柄(不管是socket句柄,还是其他文件或命名管道或设备句柄)建立联系,建立联系的工作由程序员完成,当调用select()时,由内核根据IO状态修改fe_set的内容,由此来通知执行了select()的进程哪一socket或文件可读。
多端口复用函数select在调用前要首先设置监听的端口数目,FD_ZERO是清空端口集,FD_SET是设置端口集。
select()函数常常用在用一个进程监听多个服务器端socket。
有时,select()也被当作延时函数使用。sleep()延时会释放CPU,select()的话,可以在占用CPU的情况下延时。
select()函数主要是建立在fd_set类型的基础上的。fd_set(它比较重要所以先介绍一下)是一组文件描述字(fd)的集合,它用一位来表示一个fd(fileDescripction 下面会仔细介绍),对于fd_set类型通过下面四个宏来操作:
fd_set set;
FD_ZERO(&set); /*将set清零使集合中不含任何fd*/
FD_SET(fd, &set); /*将fd加入set集合*/
FD_CLR(fd, &set); /*将fd从set集合中清除*/
FD_ISSET(fd, &set); /*测试fd是否在set集合中*/
过去,一个fd_set通常只能包含<32的fd(文件描述字),因为fd_set其实只用了一个32位矢量来表示fd; 现在,UNIX系统通常会在头文件<sys/select.h>中定义常量FD_SETSIZE,它是数据类型fd_set的描述字数量,其值通常是1024,这样就能表示<1024的fd。根据fd_set的位矢量实现,我们可以重新理解操作fd_set的四个宏:
fd_set set;
FD_ZERO(&set); /*将set的所有位置0,如set在内存中占8位则将set置为00000000*/
FD_SET(0, &set); /*将set的第0位置1,如set原来是00000000,则现在变为100000000,这样fd==1的文件描述字就被加进set中了*/
FD_CLR(4, &set); /*将set的第4位置0,如set原来是10001000,则现在变为10000000,这样fd==4的文件描述字就被从set中清除了*/
FD_ISSET(5, &set); /*测试set的第5位是否为1,如果原来set是10000100,则返回非零,表明fd==5的文件描述符在set中,否则返回0*/
注意:fd的最大值必须<FD_SETSIZE。
分享到:
相关推荐
[sopass xx:yy:zz:aa:bb:cc]\ [msglvl N] 举例: 1)[root@linux /]# ethtool eth1 Settings for eth1: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full ...
欢迎来到 jrodriguezdiazz-portfolio :waving_hand: :man_technologist_medium-dark_skin_tone:这是我的个人作品集。... 随时检查。 您还可以查看。表达您的支持给一个 :star: 如果这个项目对你有帮助!...
官方语言 Python维达斯!在具有意义的前提下,必须以书面形式提交新的书面信息,并以书面形式支付一切费用。... :roasted_sweet_potato:甘薯rústicasCOM molho德FizzBuzz :pot_of_food: Sopa de legumes
,主图指标,顶底信号,突破,转折信号,都很明显
"ZZ" 输出: 0 注意: S 和 J 最多含有50个字母。 J 中的字符不重复。 解法: var numJewelsInStones = function(J, S) { return S.split('').filter( i => J.includes(i)).length } 思路: 将 S 转换成数组 过滤掉...
: :green_square: 所有系统均可运行 ... ZZ语音 :green_square: 向上 613毫秒 :green_square: 向上 377毫秒 :page_facing_up: 执照 技术支持: 编码: :copyright: ./history目录中的数据
基于国家标准的endnote的输出样式,适用于学生党论文插入文献参考,较为方便。endnote论文神器。
应用广泛的嵌入式操作系统——ZZ-Linux.pdf
适合中国论文参考文献的一般格式
base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz
那么我们可以把这几个分区,分别安装在C:\XX,C:\YY,C:\ZZ文件夹下,访问对应的分区只需要访问对应的文件夹即可。;;安装演示;硬盘的分区规划;安装演示;安装的要点;Linux的启动与登录;Linux的启动与登录
[Local] C=ZZ, O=Certainly, OU=test.example.com from kaydel-ko, CN=test.example.com Issuer: C=ZZ, O=Certainly, OU=test.example.com from kaydel-ko, CN=test.example.com Created on: Sun Sep 15 01:30:14 2
NULL 博文链接:https://greatwqs.iteye.com/blog/2429185
博文链接:https://lkfnn.iteye.com/blog/33600
qt支持界面旋转,在启动时可以增加roration=90
I core board (using me to remove protection) uses me 5.25 2 what is system tick 1 system tick? System tick system timer is a peripheral device in the me kernel
浑浊 :cloud: :video_game: :floppy_disk: Telepítés $ git clone https://github.com/TheBugsTeam/cloudified.git $ cd cloudified $ npm install一... 启用weboldalnakcélja,hogymegnézzük,melyikjátékot,
SST取一定年份的1-12月的月平均代码;SST一定年份的月平均的图像(未输出);SST一定年份的月平均固定colorbar的生成图像的代码;SST一定年份的月平均未固定colorbar的生成图像的代码;SST一定年份的月趋势图
zz_layer.il是源代码,install.bat是安装的 使用举例:zz 1-3 4 126 127 层号定义,与PADS类似:1~120是etch ;SolderMask: 121(top) 128(bot) ;Silkscreen: 126(top) 129(bot) ;Assembly: 127(top) 130(bot) ;Paste...