Provided by:
manpages-de-dev_0.5-2ubuntu1_all 
BEZEICHNUNG
popen, pclose - bearbeite E/A
ÜBERSICHT
#include <stdio.h>
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);
BESCHREIBUNG
Die Funktion popen() öffnet einen Prozess dadurch, dass sie sich nach
Erzeugen einer Pipe aufteilt und eine Shell öffnet. Da eine Pipe nach
Definition unidirektional ist, darf das Argument type nur Lesen oder
Schreiben angeben, nicht beides; der resultierende Datenkanal ist
demzufolge nur-lesend oder nur-schreibend.
Das Argument command ist ein Zeiger auf einen mit NULL beendeten
String, der ein Shell-Kommandozeile enthält. Dieses Kommando wird an
-c -Flag an /bin/sh übergeben; Interpretation, falls nötig, wird von
der Shell durchgeführt. Das Argument mode ist ein Zeiger auf einen mit
NULL beendeten String, der entweder ‘r’ für Lesen oder ‘w’ für
Schreiben sein muss.
Der Rückgabewert von popen() ist ein normaler Standard-E/A-Datenkanal
in jeder Hinsicht, trotzdem muss er mit pclose() , nicht mit fclose()
geschlossen werden. Schreiben in solch einen Datenkanal bewirkt
Schreiben in die Standardeingabe des Kommandos; die Standardausgabe der
Kommandos ist die des Prozesses, der popen(), aufgerufen hat, wenn dies
nicht vom Programm selbst geändert wird. Umgekehrt lesen mit popen
geöffnete Kanäle von der Standardausgabe des Programms während die die
Standardeingabe dieselbe des aufrufenden Programms ist.
Beachten Sie, dass Ausgabe- popen()-Kanäle nach Voreinstellung voll
gepuffert sind.
Die Funktion pclose() wartet bis der zugehörige Prozess beendet ist und
gibt den Rückgabewert des Kommandos wie von wait4() geliefert, zurück.
RÜCKGABEWERT
Die Funktion popen() gibt NULL zurück wenn die Aufrufe fork(2) oder
pipe(2) fehlschlagen, oder wenn kein Speicher belegt werden kann.
Die Funktion pclose() gibt -1 zurück wenn stream nicht mit einem durch
‘‘popen’’ erzeugten Datenkanal verbunden werden kann, wenn stream
bereits mit ‘‘pclose’’ geschlossen wurde, oder wenn wait4 () einen
Fehler zurückliefert.
FEHLER
Die Funktion popen() setzt errno nicht zuverlässig. (Gilt das unter
Linux?)
BUGS
Da die zum Lesen geöffnete Standardeingabe eines Programms ihren
Suchindex mit dem Prozess teilt, der popen() aufgerufen hat, kann es
vorkommen, dass die Leseposition des Programms nicht wie erwartet ist,
wenn der Originalprozess gepuffertes Schreiben durchgeführt hat.
Genauso kann die Ausgabe eines zum Schreiben geöffneten Kommandos
durcheinandergeraten mit dem Originalprozess. Letzteres kann vermieden
werden durch Aufruf von fflush(3) vor popen().
Fehler, die Shell aufzurufen, kann nicht unterschieden werden von
Fehler der Shell, das Programm aufzurufen, oder einem sofortigen Ende
des Programms. Einziger Hinweis ist ein Rückgabewert von 127. (Gilt
das unter Linux?)
Die Funktion popen() ruft immer sh, nicht csh auf.
GESCHICHTE
Funktionen() popen und pclose() erschienen in Version 7 AT&T UNIX.
SIEHE AUCH
fork(2), sh(1), pipe(2), wait4(2), fflush(3), fclose(3), fopen(3),
stdio(3), system(3).