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是怎么输出来的?整个的执行顺序是怎样?
请各位大侠指教!
程序源代码:
#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是怎么输出来的?整个的执行顺序是怎样?
请各位大侠指教!
...全文
相关推荐
计算机linux实验二应用
实验旨在让学习者理解这两种管道的实现原理,并掌握如何在实际编程中运用它们进行进程间的通信。1.
壳实现和流水线
总的来说,理解和掌握壳的实现与流水线对于开发高效、灵活的CLI工具至关重要。
linux进程间的通信:匿名管道
通过理解和运用这种技术,开发者可以更好地设计和实现多进程协作的系统和应用。
西北工业大学软件学院操作系统实验4.zip
在实现过程中,学生需要熟悉fork、pipe、dup2等系统调用,以及如何使用它们来构建通信管道。其次,消息传递机制提供了更高级别的进程间通信方式。它允许进程之间交换结构化消息,可以支持双向通信。
c语言 fork pipe 实现popen plcose
"c语言fork pipe实现popen plcose源码分析"本文将对c语言中的fork和pipe机制进行深入分析,并结合popen和pclose源码修改,实现popen plcose源码的实现


