Ich habe versucht, im Internet zu suchen, aber es gibt kaum Ressourcen. Ein kleines Beispiel würde ausreichen.
EDIT Ich meine, zwei verschiedene C-Programme, die miteinander kommunizieren. Ein Programm sollte "Hi" senden und das andere sollte es empfangen. Sowas in der Art.
ls | grep ".o"
? Vielleicht hilft ein bisschen mehr Erklärung, was Sie meinen ...Antworten:
Eine reguläre Pipe kann nur zwei verwandte Prozesse verbinden. Es wird von einem Prozess erstellt und verschwindet, wenn der letzte Prozess es schließt.
Eine Named Pipe , die aufgrund ihres Verhaltens auch als FIFO bezeichnet wird, kann zum Verbinden zweier nicht zusammenhängender Prozesse verwendet werden und existiert unabhängig von den Prozessen. Das heißt, es kann existieren, selbst wenn niemand es benutzt. Mit der
mkfifo()
Bibliotheksfunktion wird ein FIFO erstellt .Beispiel
writer.c
reader.c
Hinweis: Die Fehlerprüfung wurde der Einfachheit halber im obigen Code weggelassen.
quelle
open()
den Leser in eine Schleife zu stecken. Jedoch +1, da Sie ein Beispiel für zwei Programme angeben.In Erstellen von Pipes in C erfahren Sie, wie Sie ein Programm zur Verwendung einer Pipe verzweigen. Wenn Sie fork () nicht möchten, können Sie Named Pipes verwenden .
Darüber hinaus können Sie den Effekt erzielen,
prog1 | prog2
indem Sie die Ausgabe vonprog1
an stdout senden und vonstdin
in lesenprog2
. Sie können stdin auch lesen, indem Sie eine Datei mit dem Namen öffnen/dev/stdin
(aber nicht sicher sind, ob diese portierbar ist).quelle
Und lese:
Aber ich denke, das
fcntl
kann eine bessere Lösung seinquelle
Was ein Programm in stdout schreibt, kann von einem anderen über stdin gelesen werden. So einfach, mit c, schreiben Sie
prog1
etwas drucken verwendenprintf()
undprog2
etwas mit lesenscanf()
. Dann renn einfachquelle
Hier ist ein Beispiel :
Die wichtigen Schritte in diesem Programm sind:
popen()
Aufruf, der die Zuordnung zwischen einem untergeordneten Prozess und einer Pipe im übergeordneten Prozess herstellt.fprintf()
Aufruf, der die Pipe als normale Datei verwendet, um in das stdin des untergeordneten Prozesses zu schreiben oder aus dessen stdout zu lesen.pclose()
Aufruf, der die Pipe schließt und den untergeordneten Prozess beendet.quelle
Lassen Sie zuerst Programm 1 die Zeichenfolge schreiben
stdout
(als ob sie auf dem Bildschirm angezeigt werden soll). Dann sollte das zweite Programm eine Zeichenfolge lesenstdin
, als würde ein Benutzer über eine Tastatur tippen. dann rennst du:quelle
Diese Antwort könnte für einen zukünftigen Googler hilfreich sein.
Ein Beispiel für einen erweiterten Zwei-Wege-Pipe-Aufruf finden Sie hier .
quelle