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: 如果这个项目对你有帮助!...
在Linux系统中,遇到“/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found”的错误提示通常意味着系统中的`libstdc++.so.6`库版本过低,无法满足某些应用程序运行所需的C++ ABI(Application Binary ...
代码如下:method IF_EX_VENDOR_ADD_DATA_CS~SET_DATA. ... endmethod. 3. ZTEST_IN:用于将 BADI 数据传入屏幕显示。代码如下:FUNCTION ZTEST_IN. ... ENDFUNCTION. 4. ZTEST_OUT:用于将屏幕数据传递到 BADI。...
官方语言 Python维达斯!在具有意义的前提下,必须以书面形式提交新的书面信息,并以书面形式支付一切费用。... :roasted_sweet_potato:甘薯rústicasCOM molho德FizzBuzz :pot_of_food: Sopa de legumes
标题中的“ZZ_MODIFIED_GEEBINF.ENS.zip”是一个压缩包文件,主要包含一个名为“ZZ_MODIFIED_GEEBINF.ENS”的文件。这个文件是一种特殊格式,用于定义EndNote的引用样式。EndNote是一款强大的文献管理软件,广泛应用...
5. **AR、DD、DDD、Qq、H、Xx、Ff、N、Ex、Gg、T、R、F、AA、SS、b、Ca、Gv、ll、AAA、AS、Arr、Mm、Nn、uu、vv、Tr、LO、zz、Sh、C t、Bo、Oo、cc、ok、gvCommand系列快捷键**: - **AR**:`_ArrayPolar` 环形阵列...
基于国家标准的endnote的输出样式,适用于学生党论文插入文献参考,较为方便。endnote论文神器。
在压缩包中的文件"xxyyzz77ww.txt"很可能包含了这些概念的实现代码,或者是用于测试这些功能的示例。分析这个文本文件的内容将有助于深入理解具体的实现细节。 总的来说,这个压缩包中的内容涉及到面向对象编程中的...
,主图指标,顶底信号,突破,转折信号,都很明显
"ZZ" 输出: 0 注意: S 和 J 最多含有50个字母。 J 中的字符不重复。 解法: var numJewelsInStones = function(J, S) { return S.split('').filter( i => J.includes(i)).length } 思路: 将 S 转换成数组 过滤掉...
而在 Linux 平台上,可以使用 g++ 编译器配合 Makefile 文件。 #### 3.2 加载图像 在进行阈值处理之前,需要先加载待处理的图像。OpenCV 提供了 `imread` 函数用于读取图像文件,并通过 `imshow` 函数显示原始图像...
/** *SDK调用说明 */ public function index() { //调用测试 import('AlipaySDK.Alipay'); $pay = new \Alipay(); /** * $trade_type 交易类型 app wap web ..._content={"body":"测试","subject":"测试",...url=...
: :green_square: 所有系统均可运行 ... ZZ语音 :green_square: 向上 613毫秒 :green_square: 向上 377毫秒 :page_facing_up: 执照 技术支持: 编码: :copyright: ./history目录中的数据
5. **电影/动画生成**:`zz_test_movie_gif.m`, `zz_test_movie.m`和`zz_test.m`可能用于生成球体运动的动态图像或GIF,使得观察者可以直观地看到模拟过程。 6. **比较和验证**:`compare_spheres.m`文件可能用于...
def set_cell_text_format(cell, font_name='宋体', font_size=11, align='center'): """ 设置单元格内的文本格式 :param cell: 单元格对象 :param font_name: 字体名称 :param font_size: 字体大小 :param ...
应用广泛的嵌入式操作系统——ZZ-Linux.pdf
这些容器包括向量(std::vector)、列表(std::list)、集合(std::set)、映射(std::map)、队列(std::queue)和栈(std::stack)。每个容器都有其特定的性能特性和用途,例如向量是动态数组,适合快速访问和在...
Linux 内核采用了稳定版本和开发版本并存的版本控制方式,版本号的命名格式为 x.yy.zz,其中 x 为主版本号,yy 为次版本号,zz 表示修订的版本号。 二、Linux 系统的安装 Linux 的主流发行版本有 Red Hat、Novell...
它支持多种编程语言,如C++、Python等,并且在跨平台方面表现优秀,可以在Windows、Linux、Mac OS等多个操作系统上运行。OpenCV因其强大的功能和易用性,在计算机视觉领域得到了广泛应用。 ### 二、模板匹配原理 ...