Sdílet prostřednictvím


_popen, _wpopen

Vytvoří kanál a spustí příkaz.

Důležité

Toto rozhraní API nelze použít v aplikacích, které se spouští v prostředí Windows Runtime. Další informace najdete v tématu Funkce CRT, které nejsou v aplikacích Univerzální platforma Windows podporované.

Syntaxe

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

Parametry

command
Příkaz, který se má spustit.

mode
Režim vráceného datového proudu

Vrácená hodnota

Vrátí datový proud přidružený k jednomu konci vytvořeného kanálu. Druhý konec kanálu je spojený se standardním vstupem nebo standardním výstupem příkazu. Funkce se vrátí NULL k chybě. Pokud je chyba způsobená neplatným parametrem, errno je nastavena na EINVALhodnotu . Platné režimy najdete v části Poznámky.

Informace o těchto a dalších kódech chyb naleznete v tématu , , , a_sys_nerr . _sys_errlist_doserrnoerrno

Poznámky

Funkce _popen vytvoří kanál. Potom asynchronně spustí kopii příkazového procesoru a použije command se jako příkazový řádek. Řetězec mode znaků určuje typ požadovaného přístupu, a to následujícím způsobem.

Režim přístupu Popis
"r" Volající proces může pomocí vráceného streamu číst standardní výstup vytvářeného příkazu.
"w" Volající proces může zapisovat do standardního vstupu vytvářeného příkazu pomocí vráceného datového proudu.
"b" Otevřete v binárním režimu.
"t" Otevřete v textovém režimu.

Poznámka

Pokud se používá v programu systému Windows, vrátí funkce neplatný ukazatel souboru, který způsobí, _popen že program přestane reagovat na neomezenou dobu. _popen funguje správně v konzolové aplikaci. Pokud chcete vytvořit aplikaci pro Windows, která přesměruje vstup a výstup, přečtěte si téma Vytvoření podřízeného procesu s přesměrovaným vstupem a výstupem v sadě Windows SDK.

_wpopenje verze širokého znaku _popenpath ; argument je _wpopen řetězec širokého znaku. _wpopen a _popen chovat se stejně jinak.

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.

Mapování rutin obecného textu

Tchar.h Rutinní _UNICODE a _MBCS není definován _MBCS Definovány _UNICODE Definovány
_tpopen _popen _popen _wpopen

Požadavky

Rutina Požadovaný hlavičkový soubor
_popen <stdio.h>
_wpopen <stdio.h> nebo <wchar.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Knihovny

Všechny verze knihoven runtime jazyka C.

Příklad

// 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");
    }
}

Tento výstup předpokládá, že v aktuálním adresáři je jen jeden soubor, který má příponu .c názvu souboru.

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

Viz také

Řízení procesů a prostředí
_pclose
_pipe