我已經做了一個程序,創建5個管道並在循環中分叉5個進程。當每個子進程被另一個程序重疊時,我已經設法將數據從父進程發送到每個子進程。通過讀取所以現在我能得到的是從父發送到管道中的數據發送數據從父母到孩子的過程,反之亦然C
// Child process - reads from pipe
if (childpid == 0) {
dup2(fd[0], 0); // replace stdin with pipe input
execv("program", arguments);
} else { // Parent process - writes to pipe
write(fd[1], buffer, strlen(buffer)+1);
}
:每個迴路以下方式進行
(parent.c) STDIN_FILENO在子程序用execv(...)執行的程序中。
像這樣(program.c):
char *buffer = (char *)malloc(50);
read(STDIN_FILENO, buffer, 50);
我的問題不過是,我如何能夠將數據發送回父?我正在考慮使用dup2來重新替換標準輸出,但是我無法使其工作。至少在使用execv(...)之前我意識到這一點。
我不知道如果這解釋是足夠的,所以我可以做一個小圖片的文字:)
這是怎麼回事,現在:
- 父 - >管
- 管道 - >子進程1
- 管道 - >子進程2
- 管 - > ...
- 管 - >子進程5
我希望它是這樣的。
- 父 - >管
- 管道 - >子過程1
- 管道 - >子過程2
- 管道 - > ...
- 管 - >子進程5
- 子進程1 - >父
- 子進程2 - >父
- ... 個
- 子進程5 - >父
感謝幫助!
你的意思是問題1.5? – Trent 2010-01-31 15:39:18
@Trent:呃,是的,我的意思是1.5 ...對不起....會相應地編輯這個......謝謝指出。 – t0mm13b 2010-01-31 15:44:28