1
學習爲C.等待叉孩子繼續
下面的代碼約fork()
和pipe()
之前寫到管道創建一個管道和一個子進程。孩子發送消息,父母讀取消息。
int main() {
int fd[2];
pid_t pid;
pipe(fd);
pid = fork();
if (pid == 0) {
// Child
close(fd[0]);
write(fd[1], "HELLO", (strlen("HELLO")+1));
exit(0);
}else{
// Parent
close(fd[1]);
char buffer[80];
read(fd[0], buffer, sizeof(buffer));
printf("Received string: %s", buffer);
}
return 0;
}
它工作正常。如果您對write
行發表評論,則父級會報告它收到了一個帶有奇怪字符的字符串,我認爲這是正常的,因爲它正在讀取與我的程序無關的內存。
但後來,它帶來的問題:是不是有可能父閱讀管之前孩子可以寫數據?如果發生這種情況,它會讀奇怪的字符。
父母如何「等待」從孩子那裏寫入數據?
將來我可能會有幾個孩子的過程,我希望父母在繼續之前等待所有孩子完成他們的工作。
檢查返回的值* *全部**這些系統調用。你看到垃圾是因爲你盲目地閱讀沒有寫入的東西。 – Mat 2014-11-08 08:55:25
@Mat:什麼系統調用?你的意思是'fork()'和'pipe()'? – Voldemort 2014-11-08 09:05:45
...和「讀」和「寫」。所有這些都可能失敗,即使他們沒有返回的信息對於制定正確的計劃也是必要的。 (對於失敗的「關閉」,通常你可以做的不多,但它也可能失敗。) – Mat 2014-11-08 09:09:18