Standartausgabe aufsplitten nach cout und fstream
-
Hallo,
ich möchte für ein Logfile die Standartausgabe "cout" aufsplitten.Derzeit kann ich die Ausgabe lediglich umleiten:
ofstream logfile; logfile.open ("logfile.txt",ios_base::app); cout.rdbuf(logfile.rdbuf());Jetzt erscheint aber nichts mehr auf der Konsole, was ja auch logisch ist

Geht es, dass ich das sowohl in die Datei, als auch auf die Standartausgaben schreibe ohne da extra mit einem Buffer arbeiten zu müssen?Grüßle Oli
-
Dafür müüstest du dir eine eigene Streambuffer-Klasse schreiben, die zwei streambuf's übernimmt und alle Ausgaben an beide weiterleitet.
-
CStoll schrieb:
Dafür müüstest du dir eine eigene Streambuffer-Klasse schreiben, die zwei streambuf's übernimmt und alle Ausgaben an beide weiterleitet.
Hm, davor wollte ich mich eigentlich drücken
...Das würde ja auch heißen, dass ich selbständig eine Funktion aufrufen muss, die "nachschaut", ob neue Daten verfügbar sind oder??
Hab mir auch mal überlegt, dass ich dann auch einfach nen kleinen Thread schreiben könnte, der auf eine Ausgabe auf "cout" pollt und dies sowohl an "cout" als auch an den filestream weiterleitet. Ist sowas möglich/sinnvoll??
Gruß Oli
-
Nein, du mußt keine Funktion schreiben, die nachschaut - du mußt lediglich eine "Split-Buffer" in cout einhängen:
class split_buffer : public std::streambuf { std::streambuf m_first,m_second; public: split_buffer(std::streambuf* first,std::streambuf* second) : m_first(first),m_second(second) {} virtual int overflow(int c=EOF) { //hier die Ausgaben an beide Zielpuffer weiterleiten } }; ofstream fout("logfile.txt",ios::app); split_buffer splitter(fout.rdbuf(),cout.rdbuf()); cout.rdbuf(&split_buffer); ...
-
Hallo Oli,
Du bist nicht der erste mit dieser Anforderung. Hier findest Du einen Lösungsansatz zum Aufspalten der Ausgabe auf zwei Devices.
Gruß
WernerPS.: Danke an 'unbekannt'; die Suchfunktion funktioniert jetzt super

-
Hi danke für die Tipps,
werde mich mal damit auseinandersetzen.Grüßle Oli