Chinaunix首页 | 论坛 | 博客
  • 博客访问: 533003
  • 博文数量: 95
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 1202
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-20 01:23
文章分类

全部博文(95)

文章存档

2010年(28)

2009年(67)

我的朋友

分类: C/C++

2009-08-28 09:51:34

http://eastsun.blogbus.com/logs/7762079.html

'fd_set'是一组文件描述符(fd)的集合。由于fd_set类型的长度在不同平台上不同,因此应该用一组标准的宏定义来处理此类变量:fd_set set;   
FD_ZERO(&set);       /* 将set清零 */
FD_SET(fd, &set);    /* 将fd加入set */    
FD_CLR(fd, &set);    /* 将fd从set中清除 */    
FD_ISSET(fd, &set);  /* 如果fd在set中则真 */      

在 过去,一个fd_set通常只能包含少于等于32个文件描述符,因为fd_set其实只用了一个int的比特矢量来实现,在大多数情况下,检查 fd_set能包括任意值的文件描述符是系统的责任,但确定你的fd_set到底能放多少有时你应该检查/修改宏FD_SETSIZE的值。*这个值是系 统相关的*,同时检查你的系统中的select() 的man手册。有一些系统对多于1024个文件描述符的支持有问题。

我们可以用select()对fd_set进行扫描,以判断设备是后可读写或是处于某种状态,它会返回一个掩码为那些可用和不可用得坐下不同的标记

# include
# include
int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout);

然后可以用FD_ISSET宏来查找你所要求的fd是否在其中,如(FD_ISSET(fd,&fdset))。

阅读(1112) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~