Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

popen - Pipe-Strom von oder zu einem Prozess öffnen

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

FILE *popen (const char *command, const char *mode);

Beschreibung

popen() führt das Kommando aus, das durch die Zeichenkette command angegeben ist, und erzeugt eine Pipe zwischen dem aufrufenden Programm und dem auszuführenden Kommando. popen() gibt als Returnwert einen Dateizeiger zurück, der entweder zum Lesen (Ein-/Ausgabe-Modus r) von der Pipe oder zum Schreiben (Ein-/Ausgabe-Modus w) auf die Pipe eingesetzt werden kann.

Die Umgebung des ausgeführten Kommandos in einer XPG4-konformen Implementierung ist so, als ob der Sohnprozess innerhalb von popen() mit fork() erzeugt worden wäre und der Sohn das sh-Kommando wie folgt aufruft:

execl ( shell_path , "sh", "-c", command , (char *)0);

shell_path ist ein nicht spezifizierter Name für das sh-Kommando.

popen() stellt sicher, dass Datenströme von vorherigen popen-Aufrufen, die in den Vaterprozessen offen bleiben, im neuen Sohnprozess geschlossen werden.

mode ist eine Zeichenkette, die den Ein-/Ausgabe-Modus festlegt:

  1. Wenn bei Start des Sohnprozesses mode r ist, wird die Standardausgabe des Kommandos auf die Pipe umgelenkt. Der Dateideskriptor STDOUT_FILENO ist dann das beschreibbare Ende, der Dateideskriptor fileno(stream) das lesbare Ende der Pipe. stream ist der von popen() zurückgegebene Stromzeiger.

  2. Wenn bei Start des Sohnprozesses mode w ist, wird die Standardeingabe des Kommandos auf die Pipe umgelenkt. Der Dateideskriptor STDIN_FILENO ist dann das lesbare Ende, der Dateideskriptor fileno(stream) das beschreibbare Ende der Pipe. stream ist der von popen() zurückgegebene Stromzeiger.

Nach popen() sind sowohl Vater- als auch Sohnprozess unabhängig voneinander ablauffähig, bevor sie sich beenden.

Returnwert

Zeiger auf einen Datenstrom

 


bei Erfolg.

 

Nullzeiger

wenn Dateien oder Prozesse nicht erzeugt werden können.

Hinweise

Wenn der Vaterprozess und der durch popen() erzeugte Prozess gleichzeitig eine Datei lesen oder beschreiben, darf keiner der Prozesse gepufferte Ein-/Ausgabe verwenden. Probleme mit einem Ausgabefilter können durch sorgfältiges Entleeren des Puffers, z.B. mit fflush() vermieden werden (siehe auch fclose()).

popen() wird nur für POSIX-Dateien ausgeführt.

Siehe auch

pclose(), pipe(), sysconf(), system(), stdio.h, Kommando sh im Handbuch „POSIX-Kommandos“ [2].