- 9
- 0
- 约1.09万字
- 约 12页
- 2016-09-21 发布于重庆
- 举报
C语言多路复用技术
linux下的常见多路复用技术[C语言]post by 陈俊生 / 2012-1-4 9:25 Wednesday要实现I/O多路复用有很多的方式,其中可以用进程或者是线程等来实现,也可以用select/poll /epoll/port等来实现。在相比两者之间,利用select/poll /epoll/port等来实现复用效率更快,实现更容易,在底层的需要的资源更少,效率更快。下面就介绍一下select/poll /epoll/port等的具体用法。Select的用法。select原型:int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);其中参数n表示监控的所有fd中最大值+1。和select模型紧密结合的四个宏,含义不解释了:FD_CLR(int fd, fd_set *set);FD_ISSET(int fd, fd_set *set);FD_SET(int fd, fd_set *set);FD_ZERO(fd_set *set);理解select模型的关键在于理解fd_set,为说明方便,取fd_set长度为1字节,fd_set中的每一bit可以对应一个文件描述符fd。则 1字节长的fd_set最大可以对应8个fd。(1)执行fd_set set; FD_ZERO(set);则set用位表示是0000,0000。(2)若fd=5,执行FD_SET(fd,set);后set变为0001,0000(第5位置为1)(3)若再加入fd=2,fd=1,则set变为0001,0011(4)执行select(6,set,0,0,0)阻塞等待(5)若fd=1,fd=2上都发生可读事件,则select返回,此时set变为0000,0011。注意:没有事件发生的fd=5被清空。基于上面的讨论,可以轻松得出select模型的特点:(1)可监控的文件描述符个数取决与sizeof(fd_set)的值。我这边服务器上sizeof(fd_set)=512,每bit表示一个文件描述符,则我服务器上支持的最大文件描述符是512*8=4096。据说可调,另有说虽然可调,但调整上限受于编译内核时的变量值。(2)将fd加入select监控集的同时,还要再使用一个数据结构array保存放到select监控集中的fd,一是用于再select返回后,array作为源数据和fd_set进行FD_ISSET判断。二是select返回后会把以前加入的但并无事件发生的fd清空,则每次开始 select前都要重新从array取得fd逐一加入(FD_ZERO最先),扫描array的同时取得fd最大值maxfd,用于select的第一个参数。(3)可见select模型必须在select前循环array(加fd,取maxfd),select返回后循环array(FD_ISSET判断是否有时间发生)。下面给一个伪码说明基本select模型的服务器模型:array[slect_len];nSock=0;array[nSock++]=listen_fd;(之前listen port已绑定并listen)maxfd=listen_fd;while {FD_ZERO(set);foreach (fd in array) {fd大于maxfd,则maxfd=fdFD_SET(fd,set)}res=select(maxfd+1,set,0,0,0);if(FD_ISSET(listen_fd,set)){newfd=accept(listen_fd);array[nsock++]=newfd;if(--res=0) continue}foreach 下标1开始 (fd in array) {if(FD_ISSET(fd,set))执行读等相关操作如果错误或者关闭,则要删除该fd,将array中相应位置和最后一个元素互换就好,nsock减一if(--res=0) continue}}poll模型poll()系统调用是System V的多元I/O解决方案。它解决了select()的几个不足,尽管select()仍然经常使用(多数还是出于习惯,或者打着可移植的名义):poll的原型#include sys/poll.hint poll (struct pollfd *fds, unsigned int nfds, int timeout);和select()不一样,poll()没有使用低效的三个基于位的文件描述符set,而是采用了一个单独的结构体pollfd数组,由fds指针指向这个组。pollfd结构体定义如下:#include sys/poll.hstr
您可能关注的文档
最近下载
- 2024-2025学年统编版道德与法治六年级下册全册教案(教学设计).pdf VIP
- 环保在线监测系统运行维护管理体系.pdf VIP
- 冯巧根 管理会计(第4版)课后习题答案.docx VIP
- 医疗废物岗位职责.docx VIP
- 最新人教版三年级数学下册全册教案(新课标版).docx VIP
- 基于单片机的火灾报警及灭火系统.docx VIP
- 基于单片机的灭火机器人设计.doc VIP
- 安徽省定远县2025年上半年事业单位公开招聘试题含答案分析.docx VIP
- 小学数学教学中数学建模思想与生活问题解决课题报告教学研究课题报告.docx
- 中国糖尿病防治指南(2024版)解读-糖尿病相关技术.pptx
原创力文档

文档评论(0)