免费注册 查看新帖 |

Chinaunix

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

求教关于Select应用中的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-15 10:37 |只看该作者 |倒序浏览
程序代码如下:
。。。;
FD_SET(fds[0],&inset1);
FD_SET(fds[1],&inset2);
。。。;
while(FD_ISSET(fds[0],&inset1)||FD_ISSET(fds[1],&inset2))
        {
                temp = select(maxfd+1,&inset1,&inset2,NULL,&tv);
                printf("temp = %d\n",temp);//测试1
                printf("fds[0] = %d\n",fds[0]);//测试2
                printf("fds[1] = %d\n\n",fds[1]);//测试3
                  if(temp < 0)
                {
                        perror("select");
                }
                  else
                {
                        if(FD_ISSET(fds[0],&inset1))
                        {
                                printf("1_isset_fds[0] = %d\n",FD_ISSET(fds[0],&inset1));//测试4
                                  rc = read(fds[0],buf,7);
                                  if(rc>0)
                                {
                                        buf[rc]='\0';
                                          printf("read: %s",buf);
                                  }
                                else
                                {
                                        perror("read");
                                }
                                printf("2_isset_fds[0] = %d\n\n",FD_ISSET(fds[0],&inset1));//测试5
                        }
                        if(FD_ISSET(fds[1],&inset2))
                        {
                                printf("2_isset_fds[1] = %d\n",FD_ISSET(fds[1],&inset2));//测试6
                                rc = write(fds[1],buf,7);
                                  if(rc>0)
                                {
                                        buf[rc]='\0';
                                          printf("rc=%d,write: %s",rc,buf);
                                  }
                                else
                                   {                         
                                        perror("write");
                                }
                                printf("2_isset_fds[1] = %d\n\n",FD_ISSET(fds[1],&inset2));//测试7
                                  sleep(10);
                          }
                }
          }

/*
请教为什么  测试4 到 测试五 值会发生改变,而  测试6   到 测试7 的值却不变化 运行结果如下:
[root@localhost ju]# ./test
rc=7
temp = 2
fds[0] = 3
fds[1] = 4

1_isset_fds[0] = 1
read: Hello!
2_isset_fds[0] = 0

2_isset_fds[1] = 1
rc=7,write: Hello!
2_isset_fds[1] = 1

temp = 2
fds[0] = 0
fds[1] = 4

2_isset_fds[1] = 1
rc=7,write: Hello!
2_isset_fds[1] = 1

temp = 2
fds[0] = 0
fds[1] = 4

2_isset_fds[1] = 1
rc=7,write: Hello!
2_isset_fds[1] = 1

temp = 2
fds[0] = 0
fds[1] = 4

2_isset_fds[1] = 1
rc=7,write: Hello!
2_isset_fds[1] = 1
*/

论坛徽章:
0
2 [报告]
发表于 2008-09-16 15:29 |只看该作者
select函数我也是比较模糊,顶你一个!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP