Wenn fertig, bitte Fenster schließen

cerr und clog

cerr und clog sind, genauso wie cout, Streams, die standardmäßig ihre Ausgaben auf die Standardausgabe ausgeben. Auch sie liegen im std-Namensraum. Überall wo bisher der Ausgabestream cout verwendet wurde, kann stattdessen auch den Ausgabestream cerr bzw. clog eingesetzt werden.

Vielleicht taucht nun die Frage auf, warum es denn diese zusätzlichen Streams überhaupt gibt? Nun, wie aus den Namen der Streams ersichtlich ist, sind diese Streams für die Ausgabe von besonderen Meldungen gedacht. So ist der Stream cerr für die Ausgabe von Fehlermeldungen gedacht und clog für die Ausgabe von irgendwelchen Kontrollausgaben, wie z.B. Meldungen zur Verfolgung des Programmablaufs. Der Stream cerr besitzt gegenüber cout und clog jedoch noch einen kleinen Unterschied: die Ausgabe erfolgt hier ungepuffert, d.h. die Ausgabe erfolgt direkt auf die Standardausgabe ohne den Umweg über einen Ausgabepuffer.

PgmHeader
#include <iostream>
#include <fsream>

int main ()
{
   // cerr Ausgabe auf Datei umleiten
   std::ofstream out("test.err");
   std::streambuf* sbuf = std::cerr.rdbuf();
   std::cerr.rdbuf(out.rdbuf());

   // Ausgabe in cerr und clog Stream
   std::cerr << "cerr Ausgabe" << std::endl;
   std::clog << "clog Ausgabe" << std::endl;

   // Umleitung unbedingt wieder aufheben!
   std::cerr.rdbuf(sbuf);
}

Wie bereits erwähnt, erfolgen die Ausgaben genauso auf die Standardausgabe wie cout Ausgaben. Im Beispiel oben (das Sie jetzt noch nicht komplett verstehen müssen um es anzuwenden) können Sie sich nun einmal ansehen, wie z.B. die Ausgabe des cerr Streams in die Datei test.err umgeleitet wird. Das Prinzip bei dieser Ausgabeumleitung, die übrigens genauso für den Ausgabestream clog und sogar für cout funktioniert, besteht darin, für die cerr Ausgabe den Ausgabepuffer eines Dateistreams einzusetzen. Mehr zu den Dateistreams später im Kurs noch.