In Lese-Puffer einer externen Anwendung schreiben?



  • Da gibt es viele Methoden, hat aber nichts mit Standard C++ zu schaffen.



  • hmmm...

    Das Problem wäre, dass in der 1.Datei die Werte wahrscheinlich mit
    cin || scanf
    eingelesen werden. (Kann auch etwas anderes sein..)
    und die Ausgaben mit
    cout || printf || putc....

    (Quellcode ist mir nicht bekannt)

    Muss auch nix mit Standard C++ zu tun haben, das Programm soll einfach eine Tastatur-EINGABE imitieren.

    ©h



  • chille07 schrieb:

    hmmm...

    Das Problem wäre, dass in der 1.Datei die Werte wahrscheinlich mit
    cin || scanf
    eingelesen werden. (Kann auch etwas anderes sein..)
    und die Ausgaben mit
    cout || printf || putc....

    (Quellcode ist mir nicht bekannt)

    Muss auch nix mit Standard C++ zu tun haben, das Programm soll einfach eine Tastatur-EINGABE imitieren.

    ©h

    Wo ist das Problem? Das funktioniert per Pipes doch wunderbar.
    $foo | bar
    bar liest per cin etc die Ausgaben von foo



  • ok...
    dann mit Pipes...

    Aber eines müsste man mir noch erklären (bin vor kurzem erst von C auf C++ umgestiegen):

    Was genau sind Pipes, und wie meint er das mit:

    interpreter schrieb:

    $foo | bar
    bar liest per cin etc die Ausgaben von foo



  • chille07 schrieb:

    ok...
    dann mit Pipes...

    Aber eines müsste man mir noch erklären (bin vor kurzem erst von C auf C++ umgestiegen):

    Was genau sind Pipes, und wie meint er das mit:

    interpreter schrieb:

    $foo | bar
    bar liest per cin etc die Ausgaben von foo

    Mit Pipes kann ich stdout eines Prozesses mit stdin eines anderen verknüpfen. Simples Beispiel:
    cat foo | wc -w

    Das Programm cat liest foo ein und gibt die Datei nach stdout aus. Per Pipe-Operator verknüpft jetzt die Shell stdout von cat mit stdin von wc. wc (wordcount) liest jetzt von stdin und zählt die Wörtr (aus foo).



  • ähm...

    ok, aber wie baue ich so etwas in einen Quellcode ein.

    Nehmen wir an... es gibt 2 Dateien:
    😉 PROG1
    😉 STEUERUNG

    Kannst du mir ein Bsp.: zeigen, wie ich jetzt im Programm "STEUERUNG" die Ausgaben des "PROG1" erhalte, und das "PROG1" als Eingabe die Ausgabe der "STEUERUNG" verwenden?

    weil...

    cat foo | wc -w
    


  • Du brauchst selbst gar nichts extra einbauen, Du liest einfach von stdin und schreibst nach stdout, dann kannst Du Deine Programme via Pipe zusammenhängen.



  • und...

    wo, wie hänge ich die Programme zusammen?



  • Wie bereits gesagt: Mit einer Pipe.

    Kannst du mir ein Bsp.: zeigen, wie ich jetzt im Programm "STEUERUNG" die Ausgaben des "PROG1" erhalte, und das "PROG1" als Eingabe die Ausgabe der "STEUERUNG" verwenden?

    PROG1 | STEUERUNG #Ausgabe von PROG1 als Eingabe für STEUERUNG verwenden
    STEUERUNG | PROG1 #Ausgabe von STEUERUNG als Eingabe für PROG1 verwenden
    

    Sowas sollte mit den meisten Shells funktionieren.



  • aha... jetz sind wir bei shells...

    😡 i hate not to know, what other people are talking about.

    dh. Wie geht das jetzt mit den shells?



  • chille07 schrieb:

    aha... jetz sind wir bei shells...

    😡 i hate not to know, what other people are talking about.

    dh. Wie geht das jetzt mit den shells?

    Wie wärs, wenn du dich mal ein paar Stunden mit Konsolen und Pipes beschäftigst?
    Wie oft sollen wirs eigentlich noch sagen: Deine Programme müssen nur von stdin lesen und nach stdout schreiben! Den Rest macht quasi das Betriebssystem.



  • ja mit Konsolen kann ich (im Windows) arbeiten...

    aber mir hat ja noch niemand gesagt, wie zB der Befehl etc. heisst, oder wie was ich mit dem CMD machen soll...

    dh. wie ich pipes mit cmd aufbaue.



  • Hm, vielleicht scheiterts ja daran: Das da ist eine Pipe: | (Sieht zwar komisch aus, is aber so. 😉 )
    Und jetzt lies nochmal was bereits geschrieben wurde.



  • danke,
    es geht

    aber...

    ich habe es wie folgt gemacht:

    in eine batch-Datei:

    pipe2.exe | pipe1.exe
    

    das ist aber (und das frage ich jetzt warum) nicht äquivalent mit

    pipe1.exe | pipe2.exe
    

    nochwas...

    warum steht unten das:

    cat foo | wc -w
    

    hmm...
    cat ist eine datei.
    foo ist ein parameter
    wc ist eine Datei
    -w ist ein Parameter?

    war das so gemeint?



  • chille07 schrieb:

    pipe2.exe | pipe1.exe
    

    das ist aber (und das frage ich jetzt warum) nicht äquivalent mit

    pipe1.exe | pipe2.exe
    

    Weil im 2. Fall eben alle Ausgaben von pip1.exe der Eingabe von pipe2 zur Verfügung gestellt werden. Im 1. Fall bekommt pipe1 die Ausgaben von pipe2

    cat foo | wc -w
    

    hmm...
    cat ist eine datei.

    Nein. Cat ist das Programm (concatenation)

    foo ist ein parameter

    Ja. foo bezeichnet in dem Fall den Namen einer Datei.

    wc ist eine Datei

    Nein. wc ist ein Programm.

    -w ist ein Parameter?

    Ja. w ist ein Parameter für das Programm wc (-w = word, wc soll also nur alle Wörter zählen)



  • Sorry,

    mit datei habe ich natürlich Programm gemeint.

    Noch ne Frage... funktioniert das NUR in der C++-Konsole oder auch in Anwendungen... zB.: Word||InternetExplorer||... also in ganz "normalen" Programmen?



  • Prinzipiell funktioniert es mit jedem Programm, dass von stdin liest und auf stdout schreibt.
    BTW: Es gibt keine C++ Konsole 😉



  • interpreter schrieb:

    chille07 schrieb:

    pipe2.exe | pipe1.exe
    

    das ist aber (und das frage ich jetzt warum) nicht äquivalent mit

    pipe1.exe | pipe2.exe
    

    Weil im 2. Fall eben alle Ausgaben von pip1.exe der Eingabe von pipe2 zur Verfügung gestellt werden. Im 1. Fall bekommt pipe1 die Ausgaben von pipe2

    Ja, Pipes sind unidirektional.



  • chille07 schrieb:

    Noch ne Frage... funktioniert das NUR in der C++-Konsole oder auch in Anwendungen... zB.: Word||InternetExplorer||... also in ganz "normalen" Programmen?

    Nein.
    Word gibt nix auf die Standardausgabe aus und Internet Explorer lässt sich IMO auch nicht derart als Pager verwenden.



  • Deine Programme müssen nur von stdin lesen und nach stdout schreiben!

    Ich habe jetzt f. gefunden:

    cout<<"\nDies geht nach stdout";
    cerr<<"\nFehlermeldungen gehen nach stderr";
    clog<<"\noder sie gehen nach clog";
    

    heisst das, das nur die Ausgaben von "cout" "übermittelt" werden?


Anmelden zum Antworten