Wymuszaj buforowanie linii stdout podczas łączenia z trójnikiem
Zazwyczaj,stdout
jest buforowany liniowo. Innymi słowy, tak długo jak twójprintf
argument kończy się znakiem nowej linii, możesz oczekiwać, że linia zostanie wydrukowana natychmiast. Nie wydaje się to mieć miejsca, gdy używana jest rura do przekierowaniatee
.
Mam program C ++,a
, który zawsze wysyła ciągi\n
-terminowane, dostdout
.
Kiedy jest uruchamiany samodzielnie (./a
) wszystko jest drukowane poprawnie i we właściwym czasie, zgodnie z oczekiwaniami. Jeśli jednak to zrobiętee
(./a | tee output.txt
), nie drukuje niczego, dopóki nie zakończy pracy, co jest sprzeczne z celem użyciatee
.
Wiem, że mogę to naprawić, dodającfflush(stdout)
po każdej operacji drukowania w programie C ++. Ale czy istnieje bardziej czysty i łatwy sposób? Czy jest na przykład polecenie, które mogłoby wymusićstdout
być buforowane liniowo, nawet przy użyciu rury?