cin/scanf von extern schreiben
-
PROBLEM:
Eine 08/15 Konsolenanwendung ProgA wartet standardmäßig auf eine Tastatureingabe über das Streaminterface**cin
oderscanf
**.
Die Eingabe soll jedoch nicht über die Tastatur stattfinden, sondern über eine zweite unabhängige Anwendung ProgB.FRAGE:
Gibt es eine Möglichkeit von ProgB auf den Eingabestream von ProgA zu schreiben?
Wie muss ProgB aussehen?
(Denkansatz & Codefragment wär super)Zusatzinfo: ProgB kann/soll ProgA starten. Zu ProgA existiert kein Sourcecode.
.sabre
-
Das Stichwort dafür lautet: Pipes.
Unter welchem Betriebssystem arbeiten die Programme?
Generell kannst du einfach in der Shell (Unix/Linux oder DOS)
ProgA | ProgB
schreiben.
Dann muß ProgA einfach auf die Standardausgabe (cout/printf) schreiben (und mittels "Piping" (|) wird die Ausgabe dann als Eingabe für ProgB weitergeleitet).
-
Ich habe nun soviel herausgefunden, dass das ProgA definitiv mit**
stdin
undstdout
**arbeitet. Das Problem bleibt nachwievor, dass ich keinen Code für diese Applikation habe. Falls im Sourcecode fürs Piping etwas angepasst werden müsste, dann nur in ProgB.Den Aufruf unter der Shell hab ich jetzt richtig verstanden?:
C:\Folder>ProgB.exe|ProgA.exe
Damit würde sozusagen**
stdout
von ProgA aufstdin
**von ProgB schreiben. Aber geht dies in dieser Form auch bidrektional? Vermutlich nur durch Programmcode in ProgB.Beige Progs laufen auf Win32 (WinXP).
-
Sorry, hatte mich bzgl. ProgA und ProgB vertan (bezogen auf deinen ersten Post):
ProgB | ProgA
Damit schreibt stdout von ProgB auf stdin von ProgA.
Dies funktioniert aber nur für reine Konsolenprogramme.
Mittels
ProgB | ProgA | ProgC
könntest du die Ausgabe von ProgA dann von einem dritten ProgC verarbeiten.
Und mittels
ProgB | ProgA >test.txt
könntest du dann noch die Ausgabe in eine Datei (text.txt) schreiben (analog ist < zum Lesen aus einer Datei).
Wenn du jedoch jetzt von einem bidirektionalen Datenaustausch sprichst (ist ProgB evtl. sogar ein Windowsprogramm?), dann wird es schon ein wenig schwieriger.
-
Wenn du jedoch jetzt von einem bidirektionalen Datenaustausch sprichst (ist ProgB evtl. sogar ein Windowsprogramm?), dann wird es schon ein wenig schwieriger.
Ja, nachdem was ich nun noch alles zum Thema Piping lesen konnte gibt es für den bidirektionalen Stream andere aufwändigere Möglichkeiten. Sowas wie das Umlenken von Standardstreams anonymer Kindprozesse durch Elternprozesse. Wer dazu Links hat, bitte posten. Ich muss mich erstmal in das Thema einarbeiten.
Danke für das Stichwort Piping.
.sabre