Por lo general, stdouttiene búfer de línea. En otras palabras, siempre que su printfargumento termine con una nueva línea, puede esperar que la línea se imprima instantáneamente. Esto no parece mantenerse cuando se usa una tubería para redireccionar tee.
Tengo un programa C ++ a, que genera cadenas, siempre \nterminadas, a stdout.
Cuando se ejecuta solo ( ./a), todo se imprime correctamente y en el momento adecuado, como se esperaba. Sin embargo, si lo canalizo a tee( ./a | tee output.txt), no imprime nada hasta que se cierra, lo que anula el propósito de usar tee.
Sé que podría solucionarlo agregando un fflush(stdout)después de cada operación de impresión en el programa C ++. Pero, ¿existe una forma más limpia y sencilla? ¿Hay algún comando que pueda ejecutar, por ejemplo, que obligaría stdouta tener búfer de línea, incluso cuando se usa una tubería?
expectyaunbufferque no parece estar incluido de forma predeterminada en OS X.