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: 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. 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. |
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].
|