Я пытаюсь написать программу, которая позволяет процессу двухсторонней связи общаться со своим дочерним элементом, то есть он может отправлять сообщение, а также получать сообщение от дочернего элемента.Моя первая попытка создать 2 канала и связать каждый конец каналов с родительским и дочерним stdin и stdout:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
int firstPipe[2];
int secondPipe[2];
if (pipe(firstPipe) < 0) {
perror("pipe");
exit(1);
}
if (pipe(secondPipe) < 0) {
perror("pipe");
exit(1);
}
if (fork() != 0) { // child
dup2(firstPipe[0], 0);
dup2(secondPipe[1], 1);
char input[70];
printf("Mr. Stark...");
fgets(input, 70, stdin);
fprintf(stderr, "%s I don't wanna go...\n", input);
} else { // parent
dup2(secondPipe[0], 0);
dup2(firstPipe[1], 1);
char message[70];
fgets(message, 70, stdin);
printf("%s I don't feel so good...", message);
}
return 0;
}
Предполагается, что эта программа отправит сообщение от дочернего к родительскому, а затем к родительскому.отправляет ответ ребенку, а затем ребенок печатает окончательный результат (мистер Старк ... Я не очень хорошо себя чувствую ... я не хочу идти ...) в stderr, но он не работает:(Когда я пытаюсь его запустить, он зависает, как будто один из процессов (или оба) ожидает ввода. Что-то не так с моим кодом? Я открыт для предложений других подходов, есликак конечный результат работает. Спасибо за помощь.