关于linux 下read和select函数问题 15

我编写一个程序,使用select函数监听我的管道control_pipe,当我输入数据给管道时,比如echo"123">/路径/control_pipe,程序是读到了我的... 我编写一个程序,使用select函数监听我的管道control_pipe,当我输入数据给管道时,比如echo "123">/路径/control_pipe,程序是读到了我的数据,可那之后,我没再输入数据,select却一直认为有数据可读,但读出的数据是0个,为什么读完数据后,select还一直认为有数据可读。以下是我的其中一段程序
for(;;)
{ step.tv_sec = 5;
step.tv_usec = 0;
FD_ZERO(&read_fd);
FD_SET(sock_fd,&read_fd);
FD_SET(control_pipe,&read_fd);
if(ret=select(control_pipe+1,&read_fd,NULL,NULL,&step)>0)
{ if(FD_ISSET(sock_fd,&read_fd)||FD_ISSET(control_pipe,&read_fd))
{
if(FD_ISSET(sock_fd,&read_fd))
{ printf("new data\n");
client_fd=accept(sock_fd,(struct sockaddr*)&client_add,&len);
if(client_fd<=0)
{perror("accept() error!\n");
close(sock_fd);
return 0;
}
else
{
n=recv(client_fd,buff,100,0);
buff[n]='\0';
printf("number of receive bytes=%d data=%s\n",n,buff);
fflush(stdout);
send(client_fd,buff,n,0);
}
}
if(FD_ISSET(control_pipe,&read_fd))
{printf("control_pipe fd:%d\n",control_pipe);
int len1 = strlen(buffer);
if (len1 >= sizeof buffer -1)
{printf("long error");
memset(buffer, 0, sizeof buffer);
break;
}
if ((read_rel=read(control_pipe, &buffer, 50))==0)
{ printf( "read number %d,empty\n",read_rel);
continue;
}

printf( "receive number:%d,data=%s\n", read_rel,buffer);
}
}/*if*/
close(client_fd);
}/*select*/
if(ret==0)
printf("time out !!\n");
}/*while*/
那这是为什么第一次输入数据,读取后,select还认为有数据刻度啊?还有你下面的那段我不怎么明白,command1.value是指哪个值啊
展开
 我来答
nnwvn15
2010-11-27 · TA获得超过170个赞
知道答主
回答量:197
采纳率:0%
帮助的人:121万
展开全部
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0
Command1.Value = True
Case 2
Command1.Value = True
Case 3
Command1.Value = True
End Select

End Sub
这样就可以了!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式