Provided by:
manpages-de-dev_0.10-1_all 
BEZEICHNUNG
popen, pclose - Datenstrom von oder zu einem Prozess weiterleiten
"UBERSICHT
#include <stdio.h>
FILE *popen(const char *befehl, const char *typ);
int pclose(FILE *datenstrom);
Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):
popen(), pclose():
_POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE || _BSD_SOURCE ||
_SVID_SOURCE
BESCHREIBUNG
Die Funktion popen() offnet einen Prozess dadurch, dass sie sich nach
Erzeugen einer Weiterleitung aufteilt und eine Shell aufruft. Da eine
Weiterleitung nach Definition in eine Richtung lauft, darf das Argument
typ nur Lesen oder Schreiben angeben, nicht beides; der resultierende
Datenstrom ist demzufolge nur-lesend oder nur-schreibend.
Das Argument befehl ist ein Zeiger auf eine mit Null beendete
Zeichenkette, die eine Shell-Befehlszeile enthalt. Dieser Befehl wird
mit dem Schalter -c an /bin/sh ubergeben; Falls notig, wird er von der
Shell interpretiert. Das Argument typ ist ein Zeiger auf eine mit Null
beendete Zeichenkette, die entweder >>r<< fur Lesen oder >>w<< fur
Schreiben enthalten muss. Seit Glibc 2.9 kann dieses Argument
zusatzlich den Buchstaben >>e<< beinhalten, der veranlasst, dass fur
den zugrundeliegenden Dateideskriptor der Schalter >>close-on-exec<<
(FD_CLOEXEC) gesetzt wird. Lesen Sie die Beschreibung des Schalters
O_CLOEXEC in open(2), um zu erfahren, warum dies nutzlich sein konnte.
Der Ruckgabewert von popen() ist in jeder Hinsicht ein normaler
Standard-E/A-Datenstrom, trotzdem muss er mit pclose(), nicht mit
fclose() geschlossen werden. Schreiben in solch einen Datenstrom
bewirkt, dass in die Standardeingabe des Befehls geschrieben wird; die
Standardausgabe des Befehls ist die des Prozesses, der popen()
aufgerufen hat, wenn dies nicht vom Befehl selbst geandert wird.
Umgekehrt liest ein mitpopen() geoffneter Datenstrom von der
Standardausgabe des Befehls, wahrend die Standardeingabe dieselbe ist,
wie die des Prozesses, der popen() aufrief.
Beachten Sie, dass popen()-Ausgabedatenstrome standardmaBig vollstandig
gepuffert sind.
Die Funktion pclose() wartet bis der zugehorige Prozess beendet ist und
gibt den Exit-Status des Befehls, wie von wait4(2) geliefert, zuruck.
R"UCKGABEWERT
Die Funktion popen() gibt NULL zuruck, wenn die Aufrufe fork(2) oder
pipe(2) fehlschlagen oder wenn kein Speicher reserviert werden kann.
Die Funktion pclose() gibt -1 zuruck, wenn wait4(2) einen Fehler
zuruckgibt oder ein anderer Fehler entdeckt wird.
FEHLER
Die Funktion popen() setzt errno nicht, wenn die Speicherreservierung
fehlschlagt. Falls das zugrundeliegende fork(2) oder pipe(2)
fehlschlagt, wird errno entsprechend gesetzt. Falls das Argument typ
ungultig ist, wird errno auf EINVAL gesetzt.
Falls pclose() den Status des Kindprozesses nicht abfragen kann, wird
errno auf ECHILD gesetzt.
KONFORM ZU
POSIX.1-2001.
Der Wer >>e<< fur typ ist eine Linux-Erweiterung.
FEHLER
Da die zum Lesen geoffnete Standardeingabe eines Befehls ihren
Suchindex mit dem Prozess teilt, der popen() aufgerufen hat, kann es
vorkommen, dass die Eingabeposition des Befehls nicht wie erwartet ist.
Ebenso konnte die Ausgabe eines zum Schreiben geoffneten Befehls mit
der des Originalprozesses gemischt werden. Letzteres kann durch
aufrufen von fflush(3) vor popen() vermieden werden.
Das Fehlschlagen des Shellaufzurufs kann nicht vom Fehlschlagein eines
Befehls, der von der Shell ausgefuhrt wurde oder einem sofortigen Ende
des Befehls, unterschieden werden. Einziger Hinweis ist ein Exit-Status
von 127.
SIEHE AUCH
sh(1), fork(2), pipe(2), wait4(2), fclose(3), fflush(3), fopen(3),
stdio(3), system(3)
KOLOPHON
Diese Seite ist Teil der Veroffentlichung 3.32 des Projekts
Linux-man-pages. Eine Beschreibung des Projekts und Informationen, wie
Fehler gemeldet werden konnen, finden sich unter
http://www.kernel.org/doc/man-pages/.
"UBERSETZUNG
Die deutsche Ubersetzung dieser Handbuchseite wurde von Patrick Rother
<krd@gulu.net>, Martin Schulze <joey@infodrom.org> und Chris Leick
<c.leick@vollbio.de> erstellt.
Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General
Public License Version 3 oder neuer bezuglich der Copyright-
Bedingungen. Es wird KEINE HAFTUNG ubernommen.
Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden,
schicken Sie bitte eine E-Mail an <debian-l10n-
german@lists.debian.org>.