我有這個管道和dup使用的例子。它應該創建一個由管道連接的兩個進程的環。下面是代碼:使用管道的兩個進程的環
#include <unistd.h>
#define READ 0
#define WRITE 1
main (int argc, char *argv[]) {
int fd[2];
pipe(fd); //first call to pipe
dup2(fd[READ],0);
dup2(fd[WRITE],1);
close(fd[READ]);
close(fd[WRITE]);
pipe(fd); //second call to pipe
if (fork()==0) {
dup2(fd[WRITE],1);
} else
dup2(fd[READ],0);
close(fd[READ]);
close(fd[WRITE]);
}
從「兩個過程的環」我明白,過程A的輸出被連接到處理B的輸入,並且處理B的輸出被連接到輸入的過程A.
第一次調用pipe之後,以及兩個suc2的連續調用,我認爲標準輸入和輸出被重定向到我的新管道的輸入和輸出。
然後,它來了第二次調用管道,讓我困惑,因爲我認爲它會覆蓋我以前的fd值。在這一點上,標準輸入和輸出是怎麼回事?
最後,叉電話:
沒有孩子重定向標準輸出管?
父母是否將標準輸入重定向到管道?
我看不到這裏的戒指。
我希望自己清楚,因爲我很困惑。
非常感謝!
優秀的解釋!非常感謝你! – 2011-06-09 11:30:07