Provided by: manpages-de-dev_2.5-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
               || /* Glibc-Versionen <= 2.19: */ _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(3) 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  mit popen() 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 blockgepuffert 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

       popen(): Liefert im Erfolgsfall einen Zeiger auf einen offenen Datenstrom zurück, der  für
       das  Lesen  und  Schreiben  einer Pipe genutzt werden kann. Falls die Aufrufe fork(2) oder
       pipe(2) fehlschlagen oder falls die Funktion keinen Speicher reservieren kann,  wird  NULL
       zurückgegeben.

       pclose():  Liefert im Erfolgsfall den Exit-Status des Befehls zurück. Falls wait4(2) einen
       Fehler zurückliefert oder ein anderer Fehler erkannt wird, wird -1 zurückgeliefert.

       Beide Funktionen setzten errno im Fehlerfall auf einen angemessenen Wert.

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.

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.

       ┌──────────────────┬───────────────────────┬─────────┐
       │SchnittstelleAttributWert    │
       ├──────────────────┼───────────────────────┼─────────┤
       │popen(), pclose() │ Multithread-Fähigkeit │ MT-Safe │
       └──────────────────┴───────────────────────┴─────────┘

KONFORM ZU

       POSIX.1-2001, POSIX.1-2008.

       Der Wer »e« für typ ist eine Linux-Erweiterung.

ANMERKUNGEN

       Hinweis: Lesen Sie Warnungen in system(3) sorgfältig.

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  4.15  des  Projekts  Linux-man-pages. Eine
       Beschreibung des Projekts, Informationen, wie Fehler  gemeldet  werden  können  sowie  die
       aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die  deutsche  Übersetzung  dieser  Handbuchseite wurde von Patrick Rother <krd@gulu.net>,
       Martin Schulze <joey@infodrom.org>, Chris Leick <c.leick@vollbio.de> und Mario Blättermann
       <mario.blaettermann@gmail.com> 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>.