Standardausgabe in ein neuen Prozess

RudolfG

Erfahrenes Mitglied
Hi Leute,

ich beschäftige mich als Vorbereitung auf mein Abschlussprojekt ein wenig mit der Standardeingabe und -ausgabe.

Mein Programm wird z. B. über die Kommandozeile wie folgt aufgerufen:

Code:
time | meine.exe

In meinem Programm lese ich dann über std::cin alles ein! Das funktioniert soweit auch super und ich habe auch verstanden, dass hier die Ausgabe von time in die Standardeingabe von meine.exe geleitet wurde.

In meinem Programm muss ich eine andere Anwendung starten und auf seinen inputstream schreiben und genau hier fehlen mir die Ideen bzw. ich weiß nicht ganz nach was ich suche bzw. gucken muss.

Starte ich das Programm mit ShellExecute() und schreibe dann die eingelesenen Daten auf dem Standardoutput meines Programms oder was bzw. wie kann man in diesem Fall vorgehen?

Hoffe, dass meine Fragestellung soweit verständlich formuliert ist.

Gruß
RudolfG
 
Hallo RudolfG,

man kann es zwar erahnen, aber es wäre nett gewesen wenn du noch dazugeschrieben hättest, dass das ganze unter Windows laufen soll.

Du hast mindestens zwei Alternativen:
  1. Verwende CreateProcess zum Starten der anderen Anwendung. Im Parameter lpStartupInfo kannst du über das Feld hStdInput ein Handle auf eine mit CreatePipe vorher angelegte Pipe mitgeben, über die du dann mit dem Prozess (unidirektional) kommunizieren kannst. Willst du auch die Standardausgabe des Prozesses auslesen, brauchst du entsprechend eine zweite Pipe für hStdOutput.
  2. Verwende _popen und schreibe auf/lese vom zurückgegebenen Dateihandle. Nachteil ist, dass hier cmd.exe aufgerufen wird, sich also ein Konsolenfenster öffnet. Wenn das nicht erwünscht ist, musst du den harten Weg mit CreateProcess gehen.

Grüße,
Matthias
 
Hi Matthias,

entschuldige bitte, ich habe einfach nicht daran gedacht das OS zu erwähnen. Werde mich in Zukunft bessern. :D

Wow, ich hätte nicht gedacht, dass man sogar die Standardausgabe des gestarteten Programmes auslesen kann. Das ist ja echt geil, dann werde ich es mit CreateProcess machen. Dann wird es für den Anwender total komfortabel und unkompliziert einzurichten sein. GEIL

Vielen vielen Dank :D

Gruß
RudolfG
 
Zurück