Я пытаюсь передать stdin моего родительского процесса в дочерний процесс.
stdin -> parentprocess -> child_eingabe [1] -> child_eingabe [0] -> childprocess ->stdin
Моя маленькая программа работает таким образом, что я могу записать материал из моего родительского процесса в канал (с помощью команды write ()), и он достигает моего ребенка через stdin.Что не работает, так это то, что стандартный вывод родительского элемента прямо записан в канал.Это работает, как я планирую?
#include <iostream>
#include <string>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main(int argc, char *argv[])
{
// string to the client
string sClient = "/tmp/myecho";
int child_eingabe[2];
cout << "Creating pipes " << endl;
if(pipe(child_eingabe) < 0) {
cout << " Error in pipe " << endl;
}
// forking now
pid_t pid;
cout << "Forking process" << endl;
if((pid = fork()) == 0) {
close(child_eingabe[1]);
int fid = -1;
if(fid=dup2(child_eingabe[0], 0) < 0)
cout << "Could not redirect STDIN" << endl;
close(child_eingabe[0]);
int result = execve(sClient.c_str(),0,0);
cout << "something went wrong while starting client" << endl;
if (result != 0) {
cout << "Could not start" << endl;
}
exit(0);
}
close(child_eingabe[0]);
// if(dup2(0,child_eingabe[1]) < 0)
if(dup2(child_eingabe[1],0) < 0)
cout << "Could not redirect STDIN" << endl;
close(0);
while(1)
{
sleep(1);
}
return 0;
}
Если я все вижу правильно, второй dup2 в родительской части не соответствует ожиданиям.