lanciare un exe / processo con stdin stdout e stderr?

Con C ++ come faccio a lanciare un exe / processo con stdin stdout e stderr? So come farlo in .NET e ricordo di aver usato popen in passato ma popen sembra consentire stdin o stdout non entrambi e non tutti i 3.

Ho bisogno di questo per Windows ma una soluzione di Linux è la benvenuta in quanto ne avrò bisogno per lo stesso progetto in futuro.

Per Windows, guarda Creazione di un processo figlio con input e output reindirizzati

Per unix, guarda questo esempio .

Devi usare CreateProcess da WinApi. Prende come argomento un object di tipo struct STARTUP_INFO . È ansible impostare i campi hStdin, hStdout e hStderr dell’object per redirect tali flussi di processo figlio agli handle di file desiderati (file, pipe, socket …)

Ho avuto problemi con i processi di generazione e lettura o scrittura sul loro stream, ma poi ho scoperto una grande libreria C ++ che è molto molto comoda .

Questo progetto open-source è chiamato tiny-process-library ed è stato creato da eidheim (un grande ringraziamento a lui).

Una piccola libreria indipendente dalla piattaforma che semplifica la creazione e l’interruzione di nuovi processi in C ++, nonché la scrittura su stdin e la lettura da stdout e stderr di un nuovo processo.

Caratteristiche

  • Nessuna dipendenza esterna
  • Semplice da usare
  • Piattaforma indipendente
  • Leggi separatamente da stout e stderr usando le funzioni anonime
  • Scrivi su stdin
  • Uccidi un processo in esecuzione (SIGTERM è supportato su sistemi simil-Unix)
  • Chiude correttamente i descrittori / handle dei file

Sto condividendo questo qui perché sono venuto in questa discussione prima di trovare la libreria diverse ore dopo, quindi spero che possa risparmiare un po ‘di tempo per altri lettori.

Una soluzione portatile sarebbe boost.process

(Nota: questa è stata proposta come libreria Boost e rilasciata con gli stessi termini di licenza, ma non ufficialmente accettata. Vedi anche Dove è Boost.Process? )