У меня есть программа, которая передает два дочерних процесса. Но я хочу, чтобы эти два процесса (дочерние) были внешними независимыми программами на Си.
Я хочу подключить выход первого процесса к входу канала и подключить вход второго процесса как выход первого канала
В основном я хочу программу, которая работает как эта команда в 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);
}