_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 EINVAL
hodnotu . 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
_doserrno
errno
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.
_wpopen
je verze širokého znaku _popen
path
; 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 rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_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