我一直在尝试做的是建立一个分叉两个孩子的程序。父进程从 stdin 读取,然后通过管道将其重定向到其子进程。然后孩子复制管道的读取端,以便它可以从标准输入(而不是管道)读取,然后将其打印到标准输出。这是代码:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
int main(int argc, char **argv) {
char buf[100];
int pipe_one[2];
// int pipe_two[2];
pipe(pipe_one);
// pipe(pipe_two);
// First child
switch(fork()) {
case -1:
exit(EXIT_FAILURE);
case 0:
close(pipe_one[1]);
dup2(pipe_one[0], STDIN_FILENO);
close(pipe_one[0]);
while (fgets(buf, 100, stdin)) {
fputs(buf, stdout);
}
fflush(stdout);
exit(EXIT_SUCCESS);
default:
break;
}
// Second child
/* switch(fork()) {
case -1:
exit(EXIT_FAILURE);
case 0:
close(pipe_two[1]);
dup2(pipe_two[0], STDIN_FILENO);
close(pipe_two[0]);
while (fgets(buf, 100, stdin)) {
fputs(buf, stdout);
}
fflush(stdout); …Run Code Online (Sandbox Code Playgroud)