_popen, _wpopen
Nach oben zu stdio.h - Index
Header-Datei
stdio.h
Kategorie
Eingabe-/Ausgaberoutinen
Prototyp
FILE *_popen (const char *command, const char *mode);
FILE *_wpopen (const wchar_t *command, const wchar_t *mode);
Beschreibung
Erstellt eine Pipe für den Befehlsinterpreter.
Die Funktion _popen erstellt eine Pipe für den Befehlsinterpreter. Der Befehlsinterpreter wird asynchron ausgeführt. Die Befehlszeile wird ihm im Parameter command übergeben. Der String mode gibt an, ob die Pipe mit der Standardeingabe/-ausgabe des Befehlsinterpreters verbunden ist und ob die Pipe im Binär- oder im Textmodus geöffnet wird.
Der String mode kann einen der folgenden Werte annehmen:
rt | Standardausgabe des untergeordneten Befehls lesen (Textmodus). | rb | Standardausgabe des untergeordneten Befehls lesen (Binärmodus). | wt | In Standardeingabe des untergeordneten Befehls schreiben (Textmodus). | wb | In Standardeingabe des untergeordneten Befehls schreiben (Binärmodus). |
---|
Die abschließenden Zeichen t oder b sind optional; fehlen sie, dann bestimmt die externe Variable _fmode den Konvertierungsmodus.
Verwenden Sie die Funktion _pclose, um die Pipe zu schließen und den Rückgabewert des Befehls zu erhalten.
Rückgabewert
Bei erfolgreicher Ausführung gibt _popen einen FILE-Zeiger zurück, mit dessen Hilfe Sie, abhängig vom Wert des Strings mode, die Standardausgabe des Befehls lesen oder in dessen Standardeingabe schreiben können.
Bei einem Fehler wird NULL zurückgegeben.
Beispiel
/* Dieses Programm initialisiert einen untergeordneten Prozess, um den Befehl 'dir' auszuführen
und die Dateiliste vom untergeordneten an den übergeordneten Prozess zu leiten.
*/
#include <stdio.h> // popen() pclose() feof() fgets() puts()
#include <string.h> // strlen()
int main( )
{
FILE* handle; // Handle für das eine Ende der Pipe
char message[256]; // Puffer für den durch die Pipe geleiteten Text
int status; // Rückgabewert der Funktion
// Eine Pipe öffnen, um Text von dem Prozess zu empfangen, der "DIR" ausführt
handle = _popen("dir /b", "rt");
if (handle == NULL)
{
perror("_popen error");
}
// Ausgabe des untergeordeneten Prozesses lesen und anzeigen
while (fgets(message, sizeof(message), handle))
{
fprintf(stdout, message);
}
// Pipe schließen und Rückgabewert prüfen
status = _pclose(handle);
if (status == -1)
{
perror("_pclose error");
}
return(0);
}
Portabilität
POSIX | Win32 | ANSI C | ANSI C++ | |
---|---|---|---|---|
_popen |
+ |
|||
_wpopen |
Nur NT |