| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 854 人关注过本帖
标题:select中宏FD_SETSIZE的疑惑
只看楼主 加入收藏
XiaoXiao_Ren
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
威 望:1
帖 子:80
专家分:198
注 册:2013-7-17
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:3 
select中宏FD_SETSIZE的疑惑
度娘了好多资料,大多都是直接使用FD_SETSIZE,查了查宏FD_SETSIZE,说有的系统中是1024,有的是512不一而定。  查看select函数说明,说是第一个参数是文件描述符集中的最大值加一,但是好多举例程序都直接使用这个宏,而且结果是正确的。

-----请教大神, 这里的第一个参数    是文件描述符集中的最大值加一   才是正确的吗?
搜索更多相关主题的帖子: 最大值 而且 资料 
2013-08-23 23:33
回首依依
Rank: 7Rank: 7Rank: 7
来 自:苏州
等 级:黑侠
威 望:1
帖 子:193
专家分:524
注 册:2011-12-3
收藏
得分:8 
FD_SETSIZE 是系统中可分配的最大文件描述符的个数,因系统而定。

select(FD_SETSIZE,...)这样的调用没有错误;select将会见识系统中所有的(FD_SETSIZE个)文件描述符的 阻塞 情况;不过如此不太好,这样会监视所有的,过于浪费;
好的调用方法是: select(MAX(所有打开的描述符)+1,...),为什么要+1,因为select第一个参数的意思是打开文件描述符的个数,文件描述符从0开始,(系统自动开启0,1,2;0——STDIN_FILENO,1--STDOUT_FILENO,2--STDERROR_FILENO),打开一个文件,向后楷一个描述符,个数当然是最大的+1。
2013-08-25 13:33
guhemeng
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:100
专家分:165
注 册:2013-7-27
收藏
得分:2 
顶回首依依
2013-08-25 18:17
XiaoXiao_Ren
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
威 望:1
帖 子:80
专家分:198
注 册:2013-7-17
收藏
得分:0 
我明白了   其实select的第一个参数是检测的文件描述符的个数,  此处或许会检测集合中没有的文件描述符, 所以第一个参数一般设置为检测的集合中文件描述符的最大值加一    为什么加一呢?是因为检测的范围是 0 到 第一个参数减一,如果仅取最大值,则该最大的文件描述符将检测不到。

否极泰来
2013-08-25 20:41
快速回复:select中宏FD_SETSIZE的疑惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014872 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved