当前位置: 技术问答>linux和unix
管道操作时发生阻塞
来源: 互联网 发布时间:2015-07-09
本文导语: 大家帮忙看看这段程序: 这段程序建立了一个管道,然后检查是否从管道中收到了某一字符串。 程序执行时有时很正确,有时会在执行了printf就不知道停到那个地方了。想不出什么原因。 sprintf(buffer,"testping %s",serve...
大家帮忙看看这段程序:
这段程序建立了一个管道,然后检查是否从管道中收到了某一字符串。
程序执行时有时很正确,有时会在执行了printf就不知道停到那个地方了。想不出什么原因。
sprintf(buffer,"testping %s",serverName);
fp = popen(buffer,"rw");
if (fp!=NULL)
{
do
{
if (fgets(buffer,80,fp)!=NULL)
{
if (strstr(buffer,"is up")!=NULL)
ret=1;
printf("testping returned %d %s",ret,buffer);
}
}while ( (feof(fp)==0) && ret==0);
pclose(fp);
}
这段程序建立了一个管道,然后检查是否从管道中收到了某一字符串。
程序执行时有时很正确,有时会在执行了printf就不知道停到那个地方了。想不出什么原因。
sprintf(buffer,"testping %s",serverName);
fp = popen(buffer,"rw");
if (fp!=NULL)
{
do
{
if (fgets(buffer,80,fp)!=NULL)
{
if (strstr(buffer,"is up")!=NULL)
ret=1;
printf("testping returned %d %s",ret,buffer);
}
}while ( (feof(fp)==0) && ret==0);
pclose(fp);
}
|
打开方式用"r"就可以了啊。
如果还有问题的话,用gdb跟踪一下了。
如果还有问题的话,用gdb跟踪一下了。
|
有时会在执行了printf就不知道停到那个地方了
////////////
肯定是陷入 dowhile死循环了,在循环内的 if 内外各加上一调试语句看看。
////////////
肯定是陷入 dowhile死循环了,在循环内的 if 内外各加上一调试语句看看。
|
你给贴全了吧。。。。连头文件一起帖上
|
if (strstr(buffer,"is up")!=NULL)
strstr什么意思??
strstr什么意思??
|
popen 的第一个参数应该是一个可执行程序啊!!!
你哪个好象是一个字符串吧!!!
你哪个好象是一个字符串吧!!!