In Lese-Puffer einer externen Anwendung schreiben?



  • 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?



  • chille07 schrieb:

    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?

    Du kannst sowohl stderr als auch stdout umleiten, ich weiß aber nicht wie genau das unter Windows geht.



  • chille07 schrieb:

    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?

    ja, genau.... 🙂

    wenn du irgendwo

    Programm1.exe | Programm2.exe
    

    siehst, dann kannst du den | in Gedanken ersetzen durch "schreib meine Daten an"...

    cout (und printf()) schreiben Standardmaessig immer an "stdout" ("Standardoutput"), und cin liesst von "stdin".... stdout und stdin kannst du dir als Betriebssystemfunktionen vorstellen, die den Output eines Programmes an einen bestimmten Ort leiten (im Falle von stdout) umgekehrt (im Falle von stdin). In normalen Konsolenprogrammen ist dieser "ORT" die Konsole.... Mit der Pipe sagst du jetzt "biege den stdout von Programm1 so um, dass er auf den selben Ort zeigt wie der stdin von Programm2...

    Mit Word oder dem IE geht das nicht, die verwenden fuer I/O (input/output 😉 ) nicht STDOUT und STDIN. stdin und -out sind dafuer gedacht, reinen Text zu transportieren, fuer "grafische" Anwendungen sind die nicht vorgesehen (und werden dementsprechend auch nicht verwendet).

    Ich hoff das war jetzt verstaendlich 🙂

    @nman, interpreter:
    ihr solltet eigentlich gerafft haben, dass der Threadersteller keine Erfahrung mit Linux, Shells oder Streams hat...



  • Blue-Tiger schrieb:

    @nman, interpreter:
    ihr solltet eigentlich gerafft haben, dass der Threadersteller keine Erfahrung mit Linux, Shells oder Streams hat...

    Dennoch waren unsere Ausführungen ziemlich deppensicher; Shells und Pipes gibts ja nicht nur unter Unix.

    Wenn mir jemand Tips gibt die Fachbegriffe enthalten die ich nicht kenne dann versuche ich auf alle Fälle mal herauszufinden, was diese bedeuten.
    Ein wenig Eigeninitiative von seiten der jeweiligen Fragesteller wäre schon wünschenswert, ich habe einfach keine Lust immer alles so vorzukauen wie du das gerade getan hast.



  • nman schrieb:

    Blue-Tiger schrieb:

    @nman, interpreter:
    ihr solltet eigentlich gerafft haben, dass der Threadersteller keine Erfahrung mit Linux, Shells oder Streams hat...

    Dennoch waren unsere Ausführungen ziemlich deppensicher; Shells und Pipes gibts ja nicht nur unter Unix.

    Wenn mir jemand Tips gibt die Fachbegriffe enthalten die ich nicht kenne dann versuche ich auf alle Fälle mal herauszufinden, was diese bedeuten.
    Ein wenig Eigeninitiative von seiten der jeweiligen Fragesteller wäre schon wünschenswert, ich habe einfach keine Lust immer alles so vorzukauen wie du das gerade getan hast.

    Ok, hast ja recht... 🙂 nur hing der Threadersteller nach 2 Seiten voller "Leite stdout von P1 ueber eine Pipe um, und P2 kann dann normal ueber stdin lesen" immer noch ziemlich in der Luft, da kann man ruhig expliziter werden (entweder indem man ihm mehr erklaert oder explizit auf google verweisst) 🙂

    EDIT: denn nicht jeder hat schonmal intensiver DOS oder Linux/Unix verwendet und ist mit dem Shell-Konzept vertraut



  • ok...

    ich habe das jetzt verstanden (pipes... stdout.. usw...)

    ALSO:
    Kann ich auch irgendwie !!TEXTE!! oder !!ZEICHEN!! ohne stdout mit einem 2. Prog "verkabeln"?

    zB.:

    puts("...");
    putch('.');
    

    2. FRAGE:
    Kann man nicht IRGENDWIE in einem externen Prog TASTENANSCHLÄGE imitieren?
    (Damit es überall funktioniert)
    PS.: das müsste doch auch gehen, oder? 😃

    mfG ©h

    PS.: mit CMD und DOS kenne ich mich eigendlich ganz gut aus, leider habe ich das mit Pipes noch nirgends gehört.



  • chille07 schrieb:

    Kann ich auch irgendwie !!TEXTE!! oder !!ZEICHEN!! ohne stdout mit einem 2. Prog "verkabeln"?

    ich kenn keine Methode dafuer... vielleicht andere?

    2. FRAGE:
    Kann man nicht IRGENDWIE in einem externen Prog TASTENANSCHLÄGE imitieren?
    (Damit es überall funktioniert)
    PS.: das müsste doch auch gehen, oder? 😃

    nicht Plattformunabhaengig. Fuer Windows gibts WinAPI-Funktionen dafuer, aber frag nicht mich, welche... schau z. B. auf msdn.microsoft.com



  • AN ALLE MODERATOREN!!!!

    Bitte das ins API-Forum verschieben!

    danke ©h


Anmelden zum Antworten