【发布时间】:2014-06-03 08:55:00
【问题描述】:
在 C 语言的父进程中,我运行 3 个子进程,每个子进程执行一个程序。
- 程序 1 获取标准输入(用户输入)并将其打印到标准输出。
- 程序 2 获取标准输入(应该来自程序 1),修改它并 打印到标准输出。
- 程序 3 获取标准输入(应该来自程序 2),修改它并 打印到标准输出
我得到program3的输出,但是program 2的修改没有显示。
以下是父级的相关代码:
if((child1 = fork()) < 0){
/*fatal*/
}
else if(child1 == 0){ //inside child 1
dup2(pipe1[1], 1); //child 1 uses pipe1[1] for writing
close(pipe1[0]);
execl("program1.out", (char *)0);
}
else{
if((child2 = fork()) <0){
/*fatal*/
}
else if(child2 == 0){ //inside child 2
close(pipe1[1]);
dup2(pipe1[0], 0); //child2 uses pipe1[0] for reading
dup2(pipe2[1], 1); //child2 uses pipe[1] for writing
execl("program2.out", (char *)0);
}
else{
if((child3 = fork()) <0){
/*fatal*/
}
else if(child3 == 0){ //inside child 3
close(pipe2[1]);
close(pipe1[0]);
execl("program3.out", (char *)0);
}
else{ //inside parent
wait(NULL);
}
}
}
程序使用 fgets 和 printf 进行读/写。
我检查了以前的问题,但我找不到我做错了什么。有什么想法吗?
【问题讨论】: