C++ und CGI: "Pausieren" der Ausgabe?



  • Hallo zusammen

    Ich programmiere seit längerem diverse CGI-Applikationen in C++. Ich weiss, dass man bei Perl-Scripts mit gewissen Optionen (evt. auch Apache-Konfiguration?) die Ausgabe sofort über den Webserver senden lassen kann. Mit anderen Worten wird die Webseite bereits geladen, bevor das CGI-Programm auf dem Webserver fertig ausgeführt wurde. (Besonders nützlich wenn das CGI Programm zeitaufwändige Aktionen ausführen muss)

    Kennt jemand eine Möglichkeit dies auch mit compilierten C++ Programmen zu erreichen?

    Bin für jegliche Tips dankbar!

    Gruss,

    Flavio



  • In Perl geschieht dies durch ausschalten des Ausgabepuffers.
    Wenn ich es noch richtig weiß mit
    $| = 0;

    In C++ musst du also nur den Puffer deaktivieren, dann werden die Daten direkt
    an den Apache übertragen und nicht erst nachdem das Programm fertig ist.



  • Danke für die Antwort!

    Leider ist es offenbar nicht ganz so einfach. Wenn ich mich richtig erinnere, hab ich dies sogar schon vor längerem mal ohne Erfolg getestet.

    Ich fand jedoch in der Zwischenzeit einen Artikel, der die nötigen Schritte sehr gut erklärt:

    http://www.linuxjournal.com/article.php?sid=4386 (Abschnitt "Pushing Continual Updates to the Browser")

    schönes Weekend!

    Gruss,

    Flavio


  • Mod

    Unter "Pushing Continual Updates to the Browser" steht wie man mehrere Dateien in einem Response an den Client schicken kann.

    Ich dachte du wolltest wissen, wie man den Ausgabepuffer flusht? Dies geht mit cout<<flush; - wobei cout meistens sowieso nicht gepuffert wird.



  • Könnte man die Ausgabe nicht einfach auf stderr umleiten?
    Dies ist ja ungepuffert.


  • Mod

    SirLant schrieb:

    Könnte man die Ausgabe nicht einfach auf stderr umleiten?
    Dies ist ja ungepuffert.

    Wozu?
    Setz doch den Puffer von stdout auf 0 bzw. verwende einen eigenen Puffer.

    stdout ist meistens sowieso nicht gepuffert.

    stderr zu missbrauchen halte ich nicht fuer gut.


Anmelden zum Antworten