免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2646 | 回复: 4
打印 上一主题 下一主题

select函数问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-15 14:24 |只看该作者 |倒序浏览
  1. select(fd + 1, &fds, NULL, NULL, &tv);
复制代码
请问为什么将fd加1,而不是fd本身啊?

论坛徽章:
0
2 [报告]
发表于 2011-03-15 14:49 |只看该作者
规定:wink:    windows下好像不严格要求

论坛徽章:
0
3 [报告]
发表于 2011-03-16 18:35 |只看该作者
是不是本身都类似,内核只要知道最多有多少就可以了
fd_set位数很多,如果通知内核最多有多少就可以检查的时间了,否则每个bit都要检查

论坛徽章:
7
摩羯座
日期:2013-12-05 10:42:57辰龙
日期:2013-12-27 13:40:49亥猪
日期:2014-01-15 09:10:37天秤座
日期:2014-01-20 11:22:20辰龙
日期:2014-01-26 17:02:25午马
日期:2014-01-27 14:22:34水瓶座
日期:2014-02-19 09:36:40
4 [报告]
发表于 2011-03-17 11:37 |只看该作者
{:2_169:}select的第一个参数是文件描述符的个数,而每个进程中的文件描述符是从0(标准输入)开始计算的,每个进程默认会打开三个。0,1,2。再打开的文件描述符就依次加1,所以select的第一个参数就是fd+1啦。希望我说的是正确的。

论坛徽章:
0
5 [报告]
发表于 2011-03-21 19:50 |只看该作者
因为文件描述符从0开始计算的,但是从1开始使用,所有要+1.

  1. fd_set rset;

  2. FD_ZERO(&rset);          /* initialize the set: all bits off */
  3. FD_SET(1, &rset);        /* turn on bit for fd 1 */
  4. FD_SET(4, &rset);        /* turn on bit for fd 4 */
  5. FD_SET(5, &rset);        /* turn on bit for fd 5 */
复制代码
For example, given the code that turns on the indicators for descriptors 1, 4, and 5, the maxfdp1 value is 6. The reason it is 6 and not 5 is that we are specifying the number of descriptors, not the largest value, and descriptors start at 0.
-------摘自unpv1
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP