2016-09-28 1 views
0

Nehmen wir an, ich habe ein Programm namens "Eltern", die fork() und execl() verwendet, um ein anderes Programm namens "Kind" zu starten, und ich möchte behalten Kommunikation zwischen diesen beiden Programmen. Es scheint, dass der beste Weg, um diese Kommunikation zu halten, die Verwendung von unbenannten Pfeifen wäre. Es ist leicht, Dokumentation und Beispiele zu den Requirements auf der "Eltern" -Programmseite zu finden, aber ich habe das selbe nicht auf der "Kind" -Seite gefunden.Requeriments in gegabelten untergeordneten Programmen eine Rohrkommunikation mit dem Launcher-Programm haben

Zum Beispiel denke ich, dass diese Anleitung ist gut, aber zeigen Sie nicht, was ich tun muss, in dem Programm mit Exec gestartet, um die Kommunikation zwischen beiden Programmen zu haben, muss ich dup() in der "Eltern" um die Deskriptoren zu teilen, aber wer ich in der Kinderseite richtig auf das Rohr beziehen sich eine Kommunikation bettwen sowohl ?: http://tldp.org/LDP/lpg/node11.html

Antwort

1

in dem Artikel, der Kind-Prozess verwendet dup und dup2 (dup2 ist besser) einzurichten einzurichten einer der Dateideskriptoren als Standardeingabe.
Der Prozess ist ähnlich für die Standardausgabe (Sie benötigen eine separate pipe und zugehörige Dateideskriptoren).

Der Elternteil kann dann mit dem Kind des Kindes kommunizieren, indem er am Ende der Leitung (en) liest und schreibt.

Wenn das Kind exec ed ist, werden diese Dateideskriptoren vererbt, so dass die gleichen Pipe-Endpunkte die Standardeingabe und -ausgabe im untergeordneten Prozess bleiben.

Mit anderen Worten, wenn Sie mit dup/dup2 wie in dem Artikel die Datei-Deskriptoren einrichten, Sie brauchen nichts Besonderes in dem exec ed Prozess zu tun, können Sie einfach auf stdio lesen und schreiben.

+0

Ich bin mir nicht sicher, ob ich dich vollständig verstehe. Sie meinen, dass, wenn alles gut im Elternteil eingestellt ist, der Kindprozess mit dem Elternteil einfach kommunizieren kann, indem er 'printf' verwendet, um zu senden und' scanf', um zu empfangen? – kroketor

+1

@kroketor Ja, das ist ziemlich genau der Punkt des Beispiels "using dup" der von Ihnen verlinkten Seite. – molbdnilo

Verwandte Themen