Ich habe 2 verschiedene Ostreams, eine davon Cerr, mit dem gleichen streambuffer, ich habe einige Bibliotheken in denen möglicherweise Cerr irgendwie modifiziert haben, (Flags? Format-Modifikatoren?).Zurücksetzen eines Ostreams, C++
cerr.rdbuf(&mystreambuffer);
ostream teststream(&mystreambuffer);
cerr << "This " << " is " << " a " << " test";
teststream << "This " << " is " << " a teststream " << " test";
druckt:
This
is
a
test
This is a teststream test
Debuggen mystreambuffer
ich bemerkt habe, dass cerr mystreambuffer->sync()
jeden <<
Betrieb ruft während teststream es überhaupt nicht nennen.
Wenn ich richtig bin cerr
ist nur ein Standard-Ostream, warum sehe ich dann diesen Unterschied in den Spülzeiten? Wie kann ich cerr wieder auf normale Spülvorgänge zurücksetzen?
EDIT: Ich sehe Sie Jungs kommentieren über Unitbuf und es standardmäßig in Cerr, aber wenn es Standard war, würde es nicht auch hier Schritt für Schritt schreiben?
#include <iostream>
int main(){
std::cerr << "This " << " is " << " a cerr " << " test\n";
std::cout << "This " << " is " << " a cout " << " test\n";
}
Cobain /tmp$ ./test
This is a cerr test
This is a cout test
Siehe mein Update auf die Frage, wie kann unitbuf auf das neue Beispiel aktiviert werden? –
@Arkaitz Jimenez: Einen Stream zu spülen bedeutet nicht unbedingt, eine neue Zeile zu schreiben. Bei der Spülung werden die Ausgangszeichen vom internen Puffer zum endgültigen Ziel übertragen, z. im Falle von ofstream ablegen. Was macht dein 'mystreambuffer-> sync()'? Wird unter anderem eine neue Zeile eingefügt? – usta
Es funktioniert jetzt mit dem Unitbuf entfernt. Ich versuche nur herauszufinden, ob die Bibliotheken, die ich benutze, das unitbuf in cerr setzen oder ob das definitiv ein Standard ist. Ich sehe, dass der Standard sagt, dass Cerr ungepuffert ist, aber das Beispiel, das ich eingefügt habe, zeigt kein ungepuffertes Verhalten. –