Pregunta

Tengo 2 ostreams diferentes, uno de ellos cerr, utilizando el mismo streambuffer, tengo algunas bibliotecas en las que cerr podría haber modificado de alguna manera, (banderas? Modificadores de formato?).

cerr.rdbuf(&mystreambuffer);
ostream teststream(&mystreambuffer);

cerr << "This " << " is " << " a " << " test";
teststream << "This " << " is " << " a teststream " << " test";

impresiones:

This
is
a
test
This is a teststream test

Depuración mystreambuffer me he dado cuenta de que las llamadas cerr mystreambuffer->sync() cada operación << mientras teststream no lo llama en absoluto.
Si soy cerr correcta es sólo una ostream estándar, entonces, porque he visto que esta diferencia en los tiempos de lavado? ¿Cómo puedo restablecer la espalda cerr a operaciones de lavado normales?

EDIT:? veo que ustedes están comentando sobre unitbuf y siendo por defecto en cerr, pero si era por defecto, ¿no escribir paso a paso aquí, así

#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
¿Fue útil?

Solución

std::cerr.unsetf( std::ios_base::unitbuf ); intento. Esa bandera está activada para cerr por defecto.

Otros consejos

ios :: bandera unitbuf es la razón por la que se establece por defecto para cerr.

Se necesita usar el manipulador nounitbuf con el fin de solucionarlo. Algunas bibliotecas mayores pueden no tenerlo, si es así, utilizar unsetf.

Editar: configuración predeterminada para unitbuf es dependiente de la implementación:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top