iniciar un exe / process con stdin stdout y stderr?

Con C ++, ¿cómo inicio un exe / process con stdin stdout y stderr? Sé cómo hacer esto en .NET y recuerdo haber usado popen en el pasado, pero popen parece permitir stdin O stdout no en ambos ni en todos 3.

Necesito esto para Windows, pero una solución de Linux es bienvenida ya que la necesitaré para el mismo proyecto en el futuro.

Para Windows, consulte Creación de un proceso secundario con entrada y salida redirigida

Para Unix, mira esta muestra .

Debes usar CreateProcess desde WinApi. Toma como argumento un objeto de tipo struct STARTUP_INFO . Puede configurar los campos hStdin, hStdout y hStderr del objeto para redirigir esas secuencias de proceso hijo a los manejadores de archivo que desee (archivo, canalización, socket …)

Tuve problemas con los procesos de generación y lectura o escritura en su flujo, pero luego descubrí una gran biblioteca de C ++ que es muy conveniente .

Este proyecto de código abierto se llama tiny-process-library y fue creado por eidheim ( muchas gracias a él).

Una biblioteca independiente de plataforma pequeña que facilita la creación y detención de nuevos procesos en C ++, así como la escritura en stdin y la lectura de stdout y stderr de un nuevo proceso.

Caracteristicas

  • Sin dependencias externas
  • Fácil de usar
  • Plataforma independiente
  • Leer separadamente de stoutr y stderr usando funciones anónimas
  • Escribir a stdin
  • Mata un proceso en ejecución (SIGTERM es compatible con sistemas tipo Unix)
  • Correctamente cierra descriptores / manejadores de archivos

Estoy compartiendo esto aquí porque primero llegué a este hilo antes de encontrar la biblioteca varias horas más tarde, así que espero que pueda ahorrar algo de tiempo para otros lectores.

Una solución portátil sería boost.process

(Nota: esto ha sido propuesto como una biblioteca de Boost, y publicado bajo los mismos términos de licencia, pero no oficialmente aceptado. Consulte también ¿Dónde está Boost.Process? )