pipe 和 dup2运用理解
最近新学习pipe和dup2一起运用,下面的输出搞不明白是怎么来的
程序源代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main( )
{
int pfds[2];
if( pipe(pfds)==0 )
{
if( fork()==0 )
{
//close(1);
printf("child.\n");
dup2( pfds[1],1);
close( pfds[0]);
printf("child close read.\n");
execlp( "ls","ls","-l",NULL );
printf("child end.\n");
}
else
{
//close(0);
printf("parent.\n");
dup2(pfds[0],0);
close(pfds[1]);
printf("parent close write.\n");
execlp( "wc","wc","-l",NULL );
printf("parent end.\n");
}
}
return 0;
}
输出结果:
parent.
parent close write.
child.
65
为什么parent end 没有输出?还有65是怎么输出来的?整个的执行顺序是怎样?
请各位大侠指教!
[解决办法]
printf("child end.\n");
printf("parent end.\n");
这两句没输出是因为程序根本不可能执行到这里来!前面说了execple是不会返回的。搜索下这个的作用。
printf("child.\n");不可能没输出。
如果没输出 , 是因为你上一句close(1)了。。也就是你测试的时候有close(1). 你帖出来的代码却没有close(1), 被你注释。你好好试试。