cin/scanf von extern schreiben



  • PROBLEM:
    Eine 08/15 Konsolenanwendung ProgA wartet standardmäßig auf eine Tastatureingabe über das Streaminterface** cin oder scanf **.
    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 und stdout **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 auf stdin **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


Log in to reply