stdout durch eine Funktion schleifen?



  • Okay wird das so klarer?

    printf("Ausgabe") -> + -> Der normale Weg zur stdout -> + -> stdout
                         |                                  |
                         + ->  Manipulation der Ausgabe  -> +
    


  • In welcher Programmiersprache? In C++ ueberlaed man einfach << fuer std::cout und den entsprechenden Typen. In C musst du dein eigenes printf anbieten, Ausgabe manipulieren und das orginale printf aufrufen.

    Leider wirkst du nicht sehr erfahren, da du von printf in C zu Qt springst, ohne bei C++ kurz anzuhalten. Und warum moechtest du stdout in eine Datei umleiten, was spricht gegen fprintf, ....

    Hast du schon irgendwas probiert? beispielsweise stdout zu schliessen und mittels fopen neu zuzuweisen?



  • Programmiersprache Qt (C++)

    Das ich das << Überladen kann ist mir bewusst. Auch das ich eigene Funktionen anbieten kann. Ich kann auch mit QTextStream meinen eigenen Stream machen.
    Ich möchte und kann aber nicht alle gegebenen Klassen, Librarys von printf auf eine eigene Funktion abändern.

    Daher ja die Frage ob ich die Standardausgabe umleiten/durschleifen kann. Damit ich am bestehenden nichts ändern brauche.



  • ...



  • Weil ich von einigen Librays die Quelltexte nicht habe und nur als *.a *lib *.dll bzw *.so vorliegen.

    Von den weiteren OpenSource Libs die angebunden werden, habe ich die Quelltexte.
    Hier möchte dann aber vermeiden mit jeder weiteren Version, erneut "Suchen und Ersetzen" durchzuführen.



  • ...



  • Gegenfrage: Warum moechtest du das?



  • im gleichen prozess (also ohne QProzess)
    hasst du auf c++ ebene keine "wirkliche" chance da was zu verbiegen ....

    Die c/c++ umgebung emuliert dir die Filehandles stdin,stdout,stderr ...
    Die bekommen meist noch fixe handle nummern.

    jede printf / funktion und std::cout nutzen diese Handles ohne das dazwischenkommst.

    Also generisch keine chance ....

    Betriebssystemspezifisch keine ahnung ob man da was tricksen kann ... ich hab da noch nix gesucht.

    Tja, wenn die libs / dlls das nicht vorsehen, das man statt auf die standard ausgabe woandershin schreibt, dann geht das nur mit boesen tricks.
    Und als erstes wuerd ich auch QProcess in erwägung ziehen ...

    Ciao ...



  • knivil schrieb:

    Gegenfrage: Warum moechtest du das?

    Weil das meine Aufgabe ist 😉

    RHBaum schrieb:

    im gleichen prozess (also ohne QProzess)
    hasst du auf c++ ebene keine "wirkliche" chance da was zu verbiegen ....

    Die c/c++ umgebung emuliert dir die Filehandles stdin,stdout,stderr ...
    Die bekommen meist noch fixe handle nummern.

    jede printf / funktion und std::cout nutzen diese Handles ohne das dazwischenkommst.

    Also generisch keine chance ....

    Betriebssystemspezifisch keine ahnung ob man da was tricksen kann ... ich hab da noch nix gesucht.

    Tja, wenn die libs / dlls das nicht vorsehen, das man statt auf die standard ausgabe woandershin schreibt, dann geht das nur mit boesen tricks.
    Und als erstes wuerd ich auch QProcess in erwägung ziehen ...

    Ciao ...

    Danke, QProcess soll zwar nicht, aber gut. Ich werde diese Möglichkeit mal als Option umsetzen.

    Was ich der weilen noch versucht habe, ist die stdout mittels freopen() in eine Datei zu schreiben. Auf dieser Datei habe ich dann ein QFileSystemWatcher laufen lassen. Via Signal und Slot warte ich auf das fileChanched Signal um die Datei wieder einzulesen ^^
    Problem ist nur das freopen() die Datei erst Schreibt wenn ein fclose() erfolgt.



  • Schon fflush ausprobiert?

    Weil das meine Aufgabe ist

    Halte ich fuer ein Geruecht. Kennst du die Dateiumleiteoperatoren, die man dem Programm mitgibt?



  • knivil schrieb:

    Schon fflush ausprobiert?

    Weil das meine Aufgabe ist

    Halte ich fuer ein Geruecht. Kennst du die Dateiumleiteoperatoren, die man dem Programm mitgibt?

    fflush - nein.

    Die Dateiumleiteoperatoren kenne ich, ich möchte das aber im Programm lösen und nicht von "aussen".


Anmelden zum Antworten