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).

InformationsquelleAutor XavierusWolf | 2012-05-22

Schreibe einen Kommentar