小编Val*_*ris的帖子

将 stdin 重定向到 children 使程序不会终止

我一直在尝试做的是建立一个分叉两个孩子的程序。父进程从 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)

c unix fork pipe

0
推荐指数
1
解决办法
35
查看次数

标签 统计

c ×1

fork ×1

pipe ×1

unix ×1