当前位置: 技术问答>linux和unix
调试dup与pipe结合的简单程序
来源: 互联网 发布时间:2016-07-23
本文导语: 有如下的测试代码, 通过pipe和dup2函数来实现简单的主从进程的通信。 但主进程在fgets时阻塞住了, 没有获得和显示子进程发来的信息。 请大家帮忙看一下, 是什么问题。 谢谢!! #include #include #include #includ...
有如下的测试代码,
通过pipe和dup2函数来实现简单的主从进程的通信。
但主进程在fgets时阻塞住了,
没有获得和显示子进程发来的信息。
请大家帮忙看一下,
是什么问题。
谢谢!!
通过pipe和dup2函数来实现简单的主从进程的通信。
但主进程在fgets时阻塞住了,
没有获得和显示子进程发来的信息。
请大家帮忙看一下,
是什么问题。
谢谢!!
#include
#include
#include
#include
#include
#include
void doChild(int in[2], int out[2]);
void doParent(int todc[2], int fromdc[2]);
int main()
{
int pid, todc[2], fromdc[2];
int tmp;
if( pipe(todc)==-1 || pipe(fromdc)==-1 )
{
printf("pipe failedn");
return 1;
}
if( (pid=fork()) == -1 )
{
printf("fork failedn");
return 1;
}
if( pid==0 )
{
doChild(todc, fromdc);
}
else
{
doParent(todc, fromdc);
wait(NULL);
printf("wait finishedn");
}
return 0;
}
void doChild(int in[2], int out[2]) //子进程函数
{
/*
if(dup2(in[0], 0) == -1)
{
printf("dup read failed in childn");
return;
}
close(in[0]);
close(in[1]);
*/
int newOut;
if((newOut=dup2(out[1], 1)) == -1) //修改子进程的输出端
{
printf("dup write failed in childn");
return;
}
close(out[1]);
close(out[0]);
for(int i=1; i