Compartilhar via


_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

Confira também

Controle de processo e ambiente
_pclose
_pipe