建立子程序的管道
檔案描述符和 FILE
物件是每個程序資源,它們本身不能通過普通 I / O 在程序之間交換。因此,為了使兩個不同的程序通過匿名管道進行通訊,一個或兩個參與程序必須從建立管道的程序繼承一個開啟的管道端,因此必須是父程序或更遠的祖先。最簡單的情況是父程序想要與子程序通訊的情況。
由於子程序必須從其父程序繼承所需的開啟檔案描述,因此必須首先建立管道。父母然後分叉。通常,每個過程要麼嚴格地是讀者,要麼嚴格地是作者; 在這種情況下,每個應該關閉它不打算使用的管道端。
void demo() {
int pipefds[2];
pid_t pid;
// Create the pipe
if (pipe(pipefds)) {
// error - abort ...
}
switch (pid = fork()) {
case -1:
// error - abort ...
break;
case 0: /* child */
close(pipefds[0]);
write(pipefds[1], "Goodbye, and thanks for all the fish!", 37);
exit(0);
default: /* parent */
close(pipefds[1]);
char buffer[256];
ssize_t nread = read(pipefds[0], sizeof(buffer) - 1);
if (nread >= 0) {
buffer[nread] = '\0';
printf("My child said '%s'\n", buffer);
}
// collect the child
wait(NULL);
break;
}
}