Я пытаюсь создать дочерний элемент, который вызывает некоторую программу или процесс. Родители записывают и считывают некоторые данные из дочернего элемента через два канала. Мой код компилируется и запускается, но на входе нет текста. Что я делаю не так? Правильно ли я закрываю трубы, правильно ли записываю трубы или выдавая данные?читать и писать с помощью одного и того же процесса, используя две разные трубы C++
#include <iostream>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
int main(){
int pipedes1[2],pipedes2[2];
char buff[256];
string text = "Hello";
pid_t pid;
pipe(pipedes1);
pipe(pipedes2);
pid = fork();
if(pid > 0){
close(pipedes1[1]);
close(pipedes2[0]);
dup2(pipedes2[1], STDOUT_FILENO);
dup2(pipedes1[0], STDIN_FILENO);
execve("/home/pi/Test", NULL, NULL);
} else {
close(pipedes1[1]);
close(pipedes2[1]);
write(pipedes1[0], text.c_str(), text.length());
while((len = read(pipedes2[0], buff, 256)) != 0){
cout << buff << endl;
}
close(pipedes2[0]);
close(pipedes1[0]);
}
return 0;
}
И есть моя программа "chield":
int main(){
string str;
cin >> str;
str = "echo " + str + " >> /home/pi/1";
cout << str << endl;
return 0;
}
Выход прог:
эхо < </главная/пи/1
Im найдены проблема write() возвращает -1. Но я не знаю почему?
Да, теперь писать, кажется, все в порядке. Но теперь моя прога перехватила цикл read(). Похоже, что мой чарт не поймал ни одного stdin и не отправил никаких выходов. –