Por lo general, stdout
tiene búfer de línea. En otras palabras, siempre que su printf
argumento 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 \n
terminadas, 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 stdout
a tener búfer de línea, incluso cuando se usa una tubería?
expect
yaunbuffer
que no parece estar incluido de forma predeterminada en OS X.