Chinaunix首页 | 论坛 | 博客
  • 博客访问: 165761
  • 博文数量: 46
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 396
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-03 12:59
文章分类

全部博文(46)

文章存档

2010年(1)

2009年(2)

2008年(43)

我的朋友

分类: C/C++

2008-04-03 21:54:47

对于多个I/O的读写,调用select函数,可以使程序阻塞于select调用,而不是阻塞在真正的I/O系统调用上,可实现对多个I/O 的操作。
include
#include
int select (int maxfdp1,fd_set *readset,fd_set *writeset,fd_set * exceptset,const struct timeval *timeout);
timeval结构用于指定这段时间的秒数和微秒数。
struct timeval{
long tv_sec ;
long tv_usec;
};
当参数设置为空指针时,select将永远等待直到一个描述字准备好I/O返回。当参数为固定时间,则在有一个描述字准备好时返回,但不能超过该参数所指定的时间范围。当参数为0使,则根本不等待。
注意1,对于以上前两种情形等待通常时慢系统调用,有可能在此期间被进程捕获的信号中断(sigaction),并从信号处理函数返回。而对于源自Berkeley的内核绝不自动重启被中断的selectSVR4可以自动重启中断的select,条件是在安装信号处理函数是指定了SA_RESTART标志。所以,如果我们在程序中有捕获信号,那么必须处理select返回EINTR错误的可能。
注意2由于不同的系统对于timeval结构体在函数返回后的值处理不同,所以从移植性考虑,我们应该假设该timeval结构在select返回时未被定义,因而每次调用select之前都对它进行重新初始化。
注意3 Select函数用描述字集,典型的是一个整数数组,其中每个整数中的每一位对应一个描述字。调用时利用FD_SET设置描述字集。在select返回后,我们描述字中任何与未就绪的描述字对应的位返回时将清为0。为此,每次调用select函数时,都要再次将所有描述字集中所关心的位均重置为1
maxfdp1参数指定待测试的描述字个数,它的值是待测试的最大描述字加1
阅读(1144) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~