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 con /ZW.

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 es un parámetro no válido, por ejemplo si command o mode es un puntero nulo, o si mode no es un modo válido, errno se establece en EINVAL. Vea los modos válidos en la sección de comentarios.

Para obtener información sobre estos y otros códigos de error, vea _doserrno, errno, _sys_errlist y _sys_nerr.

Comentarios

La función _popen crea una canalización y ejecuta de forma asincrónica una copia generada del procesador de comandos con el command de cadena especificado. La cadena de caracteres mode especifica el tipo de acceso solicitado, como se indica a continuació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 la salida, vea Crear un proceso secundario con redirección de entrada y salida 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.

Asignaciones de rutina de texto genérico

Rutina Tchar.h

_UNICODE y _MBCS no definidos

_MBCS definido

_UNICODE definido

_tpopen

_popen

_popen

_wpopen

Requisitos

Rutina

Encabezado necesario

_popen

<stdio.h>

_wpopen

<stdio.h> o <wchar.h>

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

Bibliotecas

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

Ejemplo

// crt_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))
   {
      printf(psBuffer);
   }


   /* Close pipe and print return value of pPipe. */
   if (feof( pPipe))
   {
     printf( "\nProcess returned %d\n", _pclose( pPipe ) );
   }
   else
   {
     printf( "Error: Failed to read the pipe to the end.\n");
   }
}

Resultados del ejemplo

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

Equivalente en .NET Framework

No es aplicable Para llamar a la función estándar de C, use PInvoke. Para obtener más información, vea Ejemplos de invocación de plataforma.

Vea también

Referencia

Control de proceso y de entorno

_pclose

_pipe