建立子进程的管道
文件描述符和 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;
}
}