¿Cuál es el equivalente a Posix popen () en la API de Win32?

¿Existe un equivalente aproximado de la función Linux / Unix stdio.h popen () en la API de Win32? Si es así, ¿dónde puedo encontrarlo?

Editar: necesito saber esto para corregir una omisión en la biblioteca estándar D. Cualquier respuesta debe usar solo la API Win32 estándar, sin funciones específicas de MSVC. Además, preferiría algo que no sea terriblemente de bajo nivel, si es que existe.

MSDN explica cómo hace lo que hace Popen al usar la API de Windows en la herencia de Handle Pipe . Aquí proporciona un ejemplo bien documentado. Es mucho más de bajo nivel que la función _popen encontrada en la biblioteca de tiempo de ejecución vinculada por Jason, pero utiliza la API de Win32 exclusivamente.

Puede llamar a _popen si está escribiendo una aplicación de consola. Para obtener más información, consulte la documentación en el sitio de MSDN: http://msdn.microsoft.com/en-us/library/96ayss4b(VS.80).aspx

Lamentablemente, no es particularmente fácil.

Necesita crear un conducto usando la función win32 (CreatePipe), luego típicamente necesita duplicar el extremo del conducto (DuplicateHandle) que le está dando al subproceso para permitir que se herede; de ​​lo contrario, no será así. por lo tanto no puede ser usado.

Luego necesita crear un proceso usando CreateProcess (que toma muchos apuntadores de estructura, incluyendo un STARTUPINFO), y pasar en el STARTUPINFO el handle que ha duplicado como su stdout.

Luego puede leer desde el extremo de lectura de la tubería (ReadFile, etc.) hasta que llegue a eof, luego debe limpiar cerrando todas las diferentes manijas win32.

Desenterrando un hilo viejo …

Reaccionando a la respuesta anterior de Jason Coco, y al contrario de lo que afirma la página enlazada de MSDN, aparentemente es posible hoy en día llamar a _popen () desde aplicaciones que no son de consola. Lo llamo de un componente importador de QuickTime, básicamente un archivo DLL disfrazado. Abre una ventana de consola pero muestra el comportamiento esperado. Al comstackr una herramienta de consola estándar con la opción mingw32 -mwindows para convertirla en una aplicación GUI, _popen continúa funcionando correctamente (pero se abre una ventana de consola incluso cuando se ejecuta la herramienta desde otra consola).