Umleiten von stdout pipe in C
Hier ist ein Programm mit dem ich versuche zu machen:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char* argv[])
{
char* arguments[] = {"superabundantes.py", NULL};
int my_pipe[2];
if(pipe(my_pipe) == -1)
{
fprintf(stderr, "Error creating pipe\n");
}
pid_t child_id;
child_id = fork();
if(child_id == -1)
{
fprintf(stderr, "Fork error\n");
}
if(child_id == 0) //child process
{
close(my_pipe[0]); //child doesn't read
dup2(my_pipe[1], 1); //redirect stdout
execvp("cat", arguments);
fprintf(stderr, "Exec failed\n");
}
else
{
close(my_pipe[1]); //parent doesn't write
char reading_buf[1];
while(read(my_pipe[0], reading_buf, 1) > 0)
{
write(1, reading_buf, 1); //1 -> stdout
}
close(my_pipe[0]);
wait();
}
}
Möchte ich ausführen von exec in das Kind umleiten von stdout des Kindes zu den Eltern (durch die Leitung). Ich denke, das problem könnte im Zusammenhang mit dup2, aber ich habe nicht verwendet es vor.
Bitte angeben, was "das problem" ist, anstatt nur dumping Sie Ihren code so, lassen Sie uns herausfinden. Wenn Sie nicht wissen, was das problem ist, dann fügen Sie die Fehlerberichterstattung zu deinem Programm.
Nicht Ihr problem beheben, aber Sie müssen ein int *sts für den wait () - Funktion (kann auf NULL gesetzt werden).
Nicht Ihr problem beheben, aber Sie müssen ein int *sts für den wait () - Funktion (kann auf NULL gesetzt werden).
InformationsquelleAutor XavierusWolf | 2012-05-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie auch bieten
argv[0]
beim Aufruf von exec. Also deine Argumente Lesen sollte:InformationsquelleAutor kmkaplan