2016-04-15 14 views
1

Meine Frage betrifft Rohr() Funktion in Linux: http://linux.die.net/man/2/pipeRohr() Funktion in Linux

Meine Frage lautet: "Gibt es nur eine Pfeife in Linux?". Ich meine, wenn ich mehrere Prozesse habe, die in Pipe schreiben, ist es die gleiche Pipe, was bedeutet, dass ich Daten von verschiedenen Prozessen in der gleichen read() -Operation bekomme, sobald ich Daten aus der Pipe gelesen habe?

+0

Dies ist eine sehr verwirrte Frage. Warum nicht alles mit einbeziehen, was dich dazu gebracht hat, dies überhaupt zu denken? Haben Sie ein Programm, das Ihnen Daten aus verschiedenen Prozessen anzeigt? –

Antwort

1

Lesen Sie nicht nur pipe(2), sondern auch pipe(7) und vor allem Advanced Linux Programming

Ich meine, wenn ich mehrere Prozesse, die

allgemein Rohr schreiben, sollten Sie nicht das möglich machen .. .

ist es die gleiche Leitung, was bedeutet, dass ich Daten aus verschiedenen Prozessen bekomme, sobald ich Daten aus der Leitung gelesen habe es in der gleichen read() Operation?

Ja, aber normalerweise machst du das nicht.

5

Nein. Die Funktion pipe() erstellt eine neue Rohrleitung mit zwei Enden.

Was passieren kann, ist, dass der Dateideskriptor dupliziert werden kann. Die dup, dup2 Funktionen können dies tun. fork tut es auch.

Wenn Sie zwei Programme mit doppelten Pipe-Dateideskriptoren haben, dann werden beide in der Ausgabe der Pipe angezeigt.

Es ist dasselbe wie ein Terminalfenster, das die Ausgabe von Programmen zeigt, die im Vordergrund und im Hintergrund laufen.

+0

Also was Sie sagen, ist, dass der Kind-Prozess, der in fork() erstellt wird, die Datei-Deskriptoren der Pipe erbt, so dass es eigentlich genau die gleichen Daten sind? – CrazySynthax

+3

@CrazySynthax: Genauso, wie Programme die Dateideskriptoren des Terminals von Ihrer Shell erben, wenn Sie ein neues Programm über die Befehlszeile starten. Ja. –