IO复用是Linux中的IO模型之一,IO复用就是进程预先告诉内核需要监视的IO条件,使得内核一旦发现进程指定的一个或多个IO条件就绪,就通过进程进程处理,从而不会在单个IO上阻塞了。Linux中,提供了select、poll、epoll三种接口函数来实现IO复用。
1、select函数
#include
#include
int select(int nfds, fd_set *...
Linux为多路复用IO提供了较多的接口,有select(),pselect(),poll()的方式,继承自BSD和System V 两大派系。 select模型比较简单,“轮询”检测fd_set的状态,然后再采取相应的措施。 信号驱动模型有必要仔细研究一下,一般有如下步骤:设置安装函数,信...
分类:
其他好文 时间:
2015-06-14 01:48:48
阅读次数:
225
Poll 与系统select调用相对应 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)Poll设备方法完成流程...
分类:
其他好文 时间:
2015-06-04 06:08:17
阅读次数:
114
一、系统调用select,把原来当前进程的单睡眠等待状态变成了现在的多睡眠等待状态。具体请看代码,select在内核中的实现为sys_select,代码如下:asmlinkage long
sys_select(int n, fd_set *inp, fd_set *outp, fd_set *exp, struct timeval *tvp)//inp,outp,exp是关于已打开文件的位图,t...
分类:
系统相关 时间:
2015-05-08 09:30:16
阅读次数:
149
问题描述编写代码用于实现程序的休眠,例如,如果要求程序休眠10秒钟,那么在这10秒内程序要一直等待,而不执行任何操作。 解决思路在Linux下,有一个select函数用于实现进程的阻塞,该函数的原型是:int select(int n, fd_set *readfds,fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);可以用...
分类:
其他好文 时间:
2015-04-30 14:15:47
阅读次数:
121
1024限定的不只是监听的个数,还是文件描述符的最大值,注意,是值 今天编写模拟客户端程序进行测试,使用了select。之前一直错记成1024是对fd_set里fd个数的限制(我的程序是每次select一个fd,所以自我感觉没问题),结果在socket连接个数到达1050~1100时,总发生段错误。...
分类:
系统相关 时间:
2015-04-27 15:12:47
阅读次数:
347
select函数介绍:
int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);
/*参数列表
int maxfdp是一个整数值,是指集合中所有文件描述符的范围,即所有文件描述符的最大值加1,不能错!在Windows中这个参数的值无所谓,可以设...
分类:
系统相关 时间:
2015-04-16 19:55:21
阅读次数:
211
fd_set的实现详细原理
define FD_SETSIZE 1024
typedef unsigned long fd_mask;
#define NBBY 8 /* number of bits in a byte */
#define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mas...
分类:
其他好文 时间:
2015-04-09 17:29:53
阅读次数:
149
在上一文中 http://blog.csdn.net/michael_kong_nju/article/details/44887411 我们讨论了I/O复用技术,即如何在一个进程里监测多个I/O, 刚开始接触还有点混论,但是现在想想,其实原理很简单,或者说内核设计者的想法很直接,就是以前我一个进程一次只能处理一个I/O,现在我通过一个fd_set结构体来实现将多个I/O的描述符放在一个类似于数组...
分类:
其他好文 时间:
2015-04-07 00:46:55
阅读次数:
743
14.select和poll的区别?Poll和epoll的区别?
(1)select和poll的区别:(参考:http://blog.csdn.net/mituan2008/article/details/6695177)
二者根本的不同是:select()的fd_set是一个位掩码(bit mask),因此fd_set有固定的长度。内核在被编译的时候,可以不受这个长度的限制,因为sel...
分类:
系统相关 时间:
2015-03-19 00:56:12
阅读次数:
279