Chinaunix首页 | 论坛 | 博客
  • 博客访问: 112230
  • 博文数量: 17
  • 博客积分: 351
  • 博客等级: 一等列兵
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-27 11:00
文章分类

全部博文(17)

文章存档

2012年(4)

2011年(13)

我的朋友

分类: LINUX

2011-08-16 14:10:55

在linux/unix下有五种I/O操作方式:
1、阻塞I/O  ,   缺省情况下,所以套接口都处于阻塞I/O模式      
2、非阻塞I/O  , 进程不停的查询内核(又叫轮询),浪费cpu时间,很少使用
3、信号启动I/O
4、异步I/O
5、I/O复用  ,I/O复用,阻塞于调用selectpoll,并非阻塞与I/O系统调用。复用模式比阻塞模式多了一次函数调用(selectpoll,带来的好处是可以等待多个文件描述符。任意一个套接字描述符进入就绪状态,select()就可以返回,接着就可以进行I/O读写。
select()原型:
#include
#include
int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, const struct timeval *timeout);

功能:

测试指定的fd可读?可写?有异常条件待处理?     

参数:

nfds: 需要检查的文件描述字个数(即检查到fd_set的第几位),数值应该比三组fd_set中所含的最大fd

       值更大,一般设为三组fd_set中所含的最大fd值加1(如在readset,writeset,exceptset中所含最大

       的fd为5,则nfds=6,因为fd是从0开始的)。设这个值是为提高效率,使函数不必检查fd_set的所

       有1024位。

readset:  用来检查可读性的一组文件描述字。

writeset: 用来检查可写性的一组文件描述字。

exceptset:用来检查是否有异常条件出现的文件描述字。(注:错误不包括在异常条件之内)

timeout:有三种可能:

         1:timeout=NULL(阻塞:直到有一个fd位被置为1函数才返回)

         2:timeout所指向的结构设为非零时间(等待固定时间:有一个fd位被置为1或者时间耗尽,函数

            均返回)

         3. timeout所指向的结构,时间设为0(非阻塞:函数检查完每个fd后立即返回) 

返回值:     

返回对应位仍然为1的fd的总数。 

注:参考unix网络编程和网络资料
阅读(1040) | 评论(0) | 转发(0) |
0

上一篇:解剖关键字typedef

下一篇:getopt 函数(一)

给主人留下些什么吧!~~