Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ popen(3S) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

pipe(2)

wait(2)

fclose(3S)

fopen(3S)

stdio(3S)

system(3S)

popen(3S)                                                         popen(3S)

NAME
     popen, pclose - Pipe zu Kommando öffnen/schließen

SYNTAX
     #include <stdio.h>

     FILE *popen(const char *Kommando, const char *Modus);

     int pclose(FILE *Stream);

BESCHREIBUNG
     popen() erzeugt eine Pipe zwischen dem aufrufenden Programm und dem
     auszuführenden Kommando. Die Argumente von popen() sind Zeiger auf mit
     Null-Byte endende Zeichenketten. Kommando besteht aus einer Shell-
     Kommandozeile. Modus ist ein E/A-Modus, d. h. entweder r für Lesen
     oder w für Schreiben. Bei dem zurückgegebenen Wert handelt es sich um
     einen Dateizeiger, so daß man im E/A-Modus w auf die Standardeingabe
     des Kommandos schreiben kann, indem man in die Datei Stream schreibt;
     und man kann von der Standardausgabe des Kommandos lesen, wenn der
     E/A-Modus r ist, indem man von der Datei Stream liest.

     Eine durch popen() geöffnete Pipe sollte mit pclose() geschlossen wer-
     den, das auf die Beendigung des zugehörigen Prozesses wartet und den
     Ende-Status des Kommandos zurückgibt.

     Da offene Dateien mehrfach benutzt werden, kann ein Kommando des Typs
     r als Eingabefilter und ein Typ w als Ausgabefilter verwendet werden.

     Das Verhalten von popen() ist nur definiert für die Werte r bzw. w von
     Modus. Andere Werte, wie rb oder wb können von speziellen Implementie-
     rungen unterstützt werden, stellen jedoch keine portablen Konstrukte
     dar. Beachten Sie, daß frühere Implementierungen von popen() nur prü-
     fen, ob das erste Zeichen von Modus ein r ist. Damit wird eine Angabe
     für Modus wie "robert the robot" wie der Lesemodus r behandelt, jedoch
     ein Modus wie "anything else" als Schreibmodus w angesehen.

BEISPIELE
     #include <stdio.h>
     #include <stdlib.h>

     main()
     {
         char *cmd = "/usr/bin/ls *.c";
         char buf[BUFSIZ];
         FILE *ptr;

         if ((ptr = popen(cmd, "r")) != NULL)
                 while (fgets(buf, BUFSIZ, ptr) != NULL)
                         (void) printf("%s", buf);
         return 0;
     }




Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

popen(3S)                                                         popen(3S)

     Dieses Programm schreibt alle Dateinamen im aktuellen Dateiverzeich-
     nis, die auf .c enden, auf die Standardausgabe [siehe stdio(3S)].

ERGEBNIS
     popen() gibt einen Nullzeiger zurück, wenn keine Dateien oder Prozesse
     erzeugt werden können.

     pclose() gibt -1 zurück, wenn Stream nicht mit popen() geöffnet wurde.

HINWEISE
     Wenn der Originalprozeß und der durch popen() erzeugte Prozeß gleich-
     zeitig eine gemeinsame Datei lesen oder beschreiben, darf keiner der
     Prozesse gepufferte E/A verwenden. Probleme mit einem Ausgabefilter
     können durch sorgfältiges Entleeren des Puffers, z. B. mit fflush()
     [siehe fclose(3S)] vermieden werden.

     Durch die Umgebungsvariablen IFS und PATH können Sicherheitsprobleme
     entstehen. Verwenden Sie vollständige Pfadnamen oder setzen Sie PATH
     zurück, und setzen Sie IFS auf Leerzeichen und Tabulator "\t".

SIEHE AUCH
     pipe(2), wait(2), fclose(3S), fopen(3S), stdio(3S), system(3S).
































Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026