Umleiten von stdout von zwei Prozessen zu einem anderen Prozess stdin in Linux-C

Ich in problem über umleiten von stdout von multi-Prozess.

Vorausgesetzt, ich habe Ein Prozess, ich benutze fork() in Einen und dann bekomme ich die Prozess A und B. Und ich fork() in B, schließlich bekomme ich Verfahren A, B und C. B und C sind durch die Implementierung anderer Programm durch exec().

Nun, ich versuche die Umleitung von stdout von A und B zu stdin von C mit zwei Leitungen.

#include<unistd.h>
#include<stdio.h>
#include<sty/types.h>
int main()
{
    int AtoC [2];
    pipe(AtoC);

    int fd1,fd2;
    fd1=fork();
    if(fd1>0)
    {
        /***In process A, I do the following steps: ***/
        close(AtoC[0]);
        dup2(AtoC[1], STDOUT_FILENO);
        /* program running in process A */
    }
    else
    {
        int BtoC [2];
        pipe(BtoC);
        fd2=fork();
        if(fd2>0)
        {
            /***In process B, I do the following steps: ***/
            close(AtoC[1]);
            close(BtoC[0]);
            dup2(BtoC[1], STDOUT_FILENO);
            /*** execute another program in process B using execl(); ***/
        }
        else
        {
            /*** In process C, I do the following steps: ***/
            close(AtoC[1]);
            close(BtoC[1]);
            dup2(AtoC[0],STDIN_FILENO);
            dup2(BtoC[0],STDIN_FILENO);
            /*** execute another different program in process C using execl(); ***/
        }
    }
}

Nun, nach diesen zwei Aussagen :

dup2(AtoC[0],STDIN_FILENO);
dup2(BtoC[0],STDIN_FILENO);

stdin von Prozess C ist schließlich umleiten zu BtoC[0] ,die die stdout des Prozesses B. Und die stdout von Prozess A ist nicht bestanden in Prozess C stdin.

Meine Frage ist, ob es eine Lösung lassen Sie mich umleiten beiden Verfahren A und B stdout in Prozess C stdin zur gleichen Zeit.

Andere Frage ist, ob ich das auch wollen, drucken Sie die stdout des Prozesses Einen Bildschirm, was soll ich tun? Ich kenne den Befehl tee in die Befehlszeile ein. Ich versuche, verwenden Sie die entsprechende Funktion tee(int fd_in, int fd_out, size_t len, unsigned int flags)im Prozess Ein, aber ich konnte nicht alles drucken des stdout des Prozesses A.

Jeder Vorschlag wird sehr geschätzt, danke.

  • Schlechte Benennung von Variablen: rufen Sie nicht das Ergebnis von fork und fd1 (das klingt wie file-Deskriptor 1). Es ist wieder eine Prozess-id. Und jeder syscall scheitern kann: fork können -1 zurück und setzen errno
InformationsquelleAutor Bing Lu | 2012-10-24
Schreibe einen Kommentar