Provided by: manpages-de-dev_0.10-1_all bug

BEZEICHNUNG

       popen, pclose - Datenstrom von oder zu einem Prozess weiterleiten

ÜBERSICHT

       #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()  öffnet  einen  Prozess  dadurch, dass sie sich nach Erzeugen einer
       Weiterleitung aufteilt und eine Shell aufruft. Da eine Weiterleitung  nach  Definition  in
       eine Richtung läuft, 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  enthält.  Dieser Befehl wird mit dem Schalter -c an /bin/sh übergeben;
       Falls nötig, wird er von der Shell interpretiert. Das Argument typ ist ein Zeiger auf eine
       mit  Null  beendete  Zeichenkette,  die  entweder  »r«  für  Lesen  oder »w« für Schreiben
       enthalten muss. Seit  Glibc  2.9  kann  dieses  Argument  zusätzlich  den  Buchstaben  »e«
       beinhalten,  der  veranlasst,  dass für 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 nützlich sein könnte.

       Der  Rückgabewert  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  geändert  wird.  Umgekehrt  liest  ein  mitpopen()  geöffneter
       Datenstrom von der Standardausgabe des Befehls, während die Standardeingabe dieselbe  ist,
       wie die des Prozesses, der popen() aufrief.

       Beachten Sie, dass popen()-Ausgabedatenströme standardmäßig vollständig gepuffert sind.

       Die  Funktion  pclose()  wartet  bis  der  zugehörige  Prozess  beendet  ist  und gibt den
       Exit-Status des Befehls, wie von wait4(2) 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 reserviert werden kann.

       Die  Funktion  pclose()  gibt  -1  zurück,  wenn wait4(2) einen Fehler zurückgibt oder ein
       anderer Fehler entdeckt wird.

FEHLER

       Die Funktion popen() setzt errno nicht, wenn die Speicherreservierung  fehlschlägt.  Falls
       das  zugrundeliegende  fork(2)  oder pipe(2) fehlschlägt, wird errno entsprechend gesetzt.
       Falls das Argument typ ungültig 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« für typ ist eine Linux-Erweiterung.

FEHLER

       Da  die  zum Lesen geöffnete 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 könnte die Ausgabe eines zum Schreiben geöffneten 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 ausgeführt 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  Veröffentlichung  3.32  des  Projekts  Linux-man-pages. Eine
       Beschreibung des Projekts und Informationen, wie Fehler  gemeldet  werden  können,  finden
       sich unter http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die  deutsche  Übersetzung  dieser  Handbuchseite wurde von Patrick Rother <krd@gulu.net>,
       Martin Schulze <joey@infodrom.org> und Chris Leick <c.leick@vollbio.de> erstellt.

       Diese Übersetzung ist Freie Dokumentation;  lesen  Sie  die  GNU  General  Public  License
       Version   3  oder  neuer  bezüglich  der  Copyright-Bedingungen.  Es  wird  KEINE  HAFTUNG
       übernommen.

       Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-
       Mail an <debian-l10n-german@lists.debian.org>.