_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