Compartir a través de


_popen, _wpopen

Crea una canalización y ejecuta un comando.

Importante

Esta API no se puede usar en aplicaciones que se ejecutan en Windows en tiempo de ejecución. Para obtener más información, vea Funciones de CRT no admitidas en aplicaciones de la Plataforma universal de Windows.

Sintaxis

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

Parámetros

command
Comando que se va a ejecutar.

mode
Modo del flujo devuelto.

Valor devuelto

Devuelve un flujo asociado a un extremo de la canalización creada. El otro extremo de la canalización se asocia a la entrada o salida estándar del comando generado. Las funciones devuelven NULL si se produce un error. Si el error está causado por un parámetro no válido, errno se establece en EINVAL. Vea los modos válidos en la sección de comentarios.

Para información sobre estos y otros códigos de error, consulte errno, _doserrno_sys_errlist y _sys_nerr.

Comentarios

La función _popen crea una canalización. A continuación, ejecuta de forma asincrónica una copia generada del procesador de comandos y usa command como línea de comandos. La cadena de caracteres mode especifica el tipo de acceso solicitado, como se indica a continuación.

Modo de acceso Descripción
"r" El proceso de llamada puede leer la salida estándar del comando generado mediante el flujo devuelto.
"w" El proceso de llamada puede escribir en la entrada estándar del comando generado mediante el flujo devuelto.
"b" Abrir en modo binario.
"t" Abrir en modo de texto.

Nota:

Si se usa en un programa de Windows, la función _popen devuelve un puntero de archivo no válido que hace que el programa deje de responder indefinidamente. _popen funciona correctamente en una aplicación de consola. Para crear una aplicación de Windows que redirija la entrada y salida, consulte Creación de un proceso secundario con entrada y salida redirigidos en Windows SDK.

_wpopen es una versión con caracteres anchos de _popen; el argumento path para _wpopen es una cadena de caracteres anchos. Por lo demás,_wpopen y _popen se comportan de forma idéntica.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Asignaciones de rutinas de texto genérico

Rutina Tchar.h _UNICODE y _MBCS no definidos _MBCS definido _UNICODE definido
_tpopen _popen _popen _wpopen

Requisitos

Routine Encabezado necesario
_popen <stdio.h>
_wpopen <stdio.h> o <wchar.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Bibliotecas

Todas las versiones de las bibliotecas en tiempo de ejecución de C.

Ejemplo

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

En este resultado se supone que solo hay un archivo en el directorio actual con la extensión de nombre de archivo .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

Consulte también

Control de procesos y entornos
_pclose
_pipe