C使用dup2管道孩子和父母

时间:2018-08-31 22:11:50

标签: c process pipe fork dup2

我正在尝试将两个过程组合在一起。我想让两个进程使用两个管道相互通信。这是我到目前为止的内容:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main(){

  //setting up two pipes
  int pipe1[2];
  int pipe2[2];
  pipe(pipe1);
  pipe(pipe2);

  //setting up child and parent
  pid_t pid = fork();
  if(pid < 0){
    perror("fork failed\n");
    exit(-1);
  }
  if(pid == 0){
    printf("child\n");
    dup2(pipe1[1], STDOUT_FILENO);
    close(pipe1[1]);
    close(pipe1[0]);
    dup2(pipe2[0], STDIN_FILENO);
    close(pipe2[0]);
    close(pipe2[1]);
  }
  if(pid > 0){
    wait(NULL);
    printf("parent\n");
    dup2(pipe1[0], STDIN_FILENO);
    close(pipe1[0]);
    close(pipe2[1]);
    dup2(pipe2[1], STDOUT_FILENO);
    close(pipe2[0]);
    close(pipe2[1]);
  }

  return 0;
}

我希望两个进程通过将一个进程的输入作为另一个进程的输出来相互通信。我设置正确吗?如果是这样,例如,如果我希望父级将整数发送给子级,而子级则要对它们执行操作,然后再将其发送回父级进行打印,那么我应该从哪里去呢?

谢谢。

0 个答案:

没有答案