_popen
, _wpopen
Cria um pipe e executa um comando.
Importante
Esta API não pode ser usada em aplicativos executados no Windows Runtime. Para obter mais informações, confira Funções do CRT sem suporte em aplicativos da Plataforma Universal do Windows.
Sintaxe
FILE *_popen(
const char *command,
const char *mode
);
FILE *_wpopen(
const wchar_t *command,
const wchar_t *mode
);
Parâmetros
command
O comando a ser executado.
mode
Modo do fluxo retornado.
Valor retornado
Retorna um fluxo associado a uma extremidade do pipe criado. A outra extremidade do pipe está associada à entrada ou saída padrão do comando gerado. As funções retornam NULL
em caso de erro. Se o erro for causado por um parâmetro inválido, errno
será definido como EINVAL
. Consulte a seção Comentários para ver os modos válidos.
Para obter informações sobre esses e outros códigos de erro, confira errno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Comentários
A função _popen
cria um pipe. Em seguida, executa de forma assíncrona uma cópia gerada do processador de comando e usa command
como a linha de comando. A cadeia de caracteres mode
especifica o tipo de acesso solicitado da seguinte maneira.
Modo de acesso | Descrição |
---|---|
"r " |
O processo de chamada pode ler a saída padrão do comando gerado usando o fluxo retornado. |
"w " |
O processo de chamada pode gravar na entrada padrão do comando gerado usando o fluxo retornado. |
"b " |
Abrir no modo binário. |
"t " |
Abrir no modo de texto. |
Observação
Se usada em um programa do Windows, a função _popen
retorna um ponteiro de arquivo inválido que faz com que o programa pare de responder indefinidamente. _popen
funciona corretamente em um aplicativo de console. Para criar um aplicativo do Windows que redireciona entrada e saída, consulte Criando um processo filho com entrada e saída redirecionadas no SDK do Windows.
A função _wpopen
é uma versão de caractere largo da função _popen
; o argumento path
para _wpopen
é uma cadeia de caracteres larga. Caso contrário, _wpopen
e _popen
se comportam de forma idêntica.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.
Mapeamentos de rotina de texto genérico
Rotina Tchar.h |
_UNICODE e _MBCS não definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tpopen |
_popen |
_popen |
_wpopen |
Requisitos
Rotina | Cabeçalho necessário |
---|---|
_popen |
<stdio.h> |
_wpopen |
<stdio.h> ou <wchar.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Bibliotecas
Todas as versões das bibliotecas em tempo de execução C.
Exemplo
// 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");
}
}
Essa saída supõe que haja apenas um arquivo no diretório atual com uma extensão de nome de arquivo .c
.
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