Provided by: manpages-de-dev_0.5-4.1ubuntu1_all bug

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).