Я хочу, чтобы существующая программа работала для двух внешних процессов в детстве - PullRequest
0 голосов
/ 17 мая 2019

У меня есть программа, которая передает два дочерних процесса. Но я хочу, чтобы эти два процесса (дочерние) были внешними независимыми программами на Си.

Я хочу подключить выход первого процесса к входу канала и подключить вход второго процесса как выход первого канала

В основном я хочу программу, которая работает как эта команда в Unix:

./myprogram prog1 | prog2

Это код:

Поскольку я новичок, я взял возвращаемое значение prog1 и dup2 вывод на стандартный вход канала и дал значение стандартного выхода prog2 и попытался подключиться в программе prog2 через dup2.

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

int main(int argc, char *argv[]) {
  printf("%s \n", argv[1]);
  printf("%s \n", argv[2]);

  int pipefd[2], status, done = 0;
  int cpid;
  pipe(pipefd);

  cpid = fork();

  if (cpid == 0) {
    // Child 1 - Process 1
    close(pipefd[0]);
    dup2(pipefd[1], STDOUT_FILENO);
    execlp(argv[1], argv[1], (char *)NULL);
  }

  cpid = fork();

  if (cpid == 0) {
    // Child 2 - Process 2
    close(pipefd[1]);
    dup2(pipefd[0], STDIN_FILENO);
    execlp(argv[2], argv[2], (char *)NULL);
  }

  close(pipefd[0]);
  close(pipefd[1]);

  waitpid(-1, &status, 0);
  waitpid(-1, &status, 0);

  return (0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...