Freigeben über


_popen, _wpopen

Erstellt eine Pipe und führt einen Befehl aus.

Wichtig

Diese API kann nicht in Anwendungen verwendet werden, die in Windows-Runtime ausgeführt werden. Weitere Informationen finden Sie im Artikel CRT functions not supported in Universal Windows Platform apps (In Apps für die universelle Windows-Plattform nicht unterstützte CRT-Funktionen).

Syntax

FILE *_popen(
    const char *command,
    const char *mode
);
FILE *_wpopen(
    const wchar_t *command,
    const wchar_t *mode
);

Parameter

command
Befehl, der ausgeführt werden soll.

mode
Modus des zurückgegebenen Streams.

Rückgabewert

Gibt einen Stream zurück, der einem Ende der erstellten Pipe zugeordnet ist. Das andere Ende der Pipe ist der Standardeingabe oder Standardausgabe des erzeugten Befehls zugeordnet. Die Funktionen geben einen Fehler zurück NULL . Wenn der Fehler durch einen ungültigen Parameter verursacht wird, errno wird auf EINVAL. Gültige Modi können Sie dem Abschnitt mit den Hinweisen entnehmen.

Informationen zu diesen und anderen Fehlercodes finden Sie unter , , _doserrno, _sys_errlistund _sys_nerr.errno

Hinweise

Die _popen Funktion erstellt eine Pipe. Anschließend wird asynchron eine spawnierte Kopie des Befehlsprozessors ausgeführt und als Befehlszeile verwendet command . Die Zeichenfolge mode gibt den angeforderten Zugriffstyp wie folgt an.

Zugriffsmodus Beschreibung
"r" Der aufrufende Prozess kann die Standardausgabe des erzeugten Befehls mit dem zurückgegebenen Stream lesen.
"w" Der aufrufende Prozess kann die Standardeingabe des erzeugten Befehls mit dem zurückgegebenen Stream schreiben.
"b" Öffnen im binären Modus.
"t" Öffnen im Textmodus.

Hinweis

Wenn die _popen-Funktion in einem Windows-Programm verwendet wird, gibt sie einen ungültigen Dateizeiger zurück, der dafür sorgt, dass das Programm für unbestimmte Zeit nicht mehr reagiert. _popen funktioniert in einer Konsolenanwendung. Informationen zum Erstellen einer Windows-Anwendung, die Eingabe und Ausgabe umleitet, finden Sie unter Erstellen eines untergeordneten Prozesses mit umgeleiteter Eingabe und Ausgabe im Windows SDK.

_wpopen ist eine Breitzeichenversion von _popen. Das path -Argument für _wpopen ist eine Breitzeichenfolge. _wpopen und _popen verhalten sich andernfalls identisch.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.

Mapping generischer Textroutinen

Tchar.h-Routine _UNICODE und _MBCS nicht definiert _MBCS definiert _UNICODE definiert
_tpopen _popen _popen _wpopen

Anforderungen

Routine Erforderlicher Header
_popen <stdio.h>
_wpopen <stdio.h> oder <wchar.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Libraries

Alle Versionen der C-Laufzeitbibliotheken.

Beispiel

// popen.c
/* This program uses _popen and _pclose to receive a
* stream of text from a system process.
*/

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

int main(void)
{
    char psBuffer[128];
    FILE* pPipe;

    /* Run DIR so that it writes its output to a pipe. Open this
     * pipe with read text attribute so that we can read it
     * like a text file.
     */

    if ((pPipe = _popen("dir *.c /on /p", "rt")) == NULL)
    {
        exit(1);
    }

    /* Read pipe until end of file, or an error occurs. */

    while (fgets(psBuffer, 128, pPipe))
    {
        puts(psBuffer);
    }

    int endOfFileVal = feof(pPipe);
    int closeReturnVal = _pclose(pPipe);

    if (endOfFileVal)
    {
        printf("\nProcess returned %d\n", closeReturnVal);
    }
    else
    {
        printf("Error: Failed to read the pipe to the end.\n");
    }
}

Bei dieser Ausgabe wird davon ausgegangen, dass nur eine Datei im aktuellen Verzeichnis vorhanden ist, die über eine .c Dateinamenerweiterung verfügt.

Volume in drive C is CDRIVE
Volume Serial Number is 0E17-1702

Directory of D:\proj\console\test1

07/17/98  07:26p                   780 popen.c
               1 File(s)            780 bytes
                             86,597,632 bytes free

Process returned 0

Siehe auch

Prozess- und Umgebungskontrolle
_pclose
_pipe