Обычно stdout
буферизируется по строке. Другими словами, до тех пор, пока ваш аргумент printf
заканчивается новой строкой, вы можете ожидать, что строка будет напечатана мгновенно. Кажется, что это не выполняется при использовании канала для перенаправления на tee
.
У меня есть программа на С++, a
, которая выводит строки, всегда \n
-terminated, на stdout
.
Когда он запускается сам по себе (./a
), все печатает правильно и в нужное время, как и ожидалось. Однако, если я подключаю его к tee
(./a | tee output.txt
), он ничего не печатает до тех пор, пока он не завершит работу, что наносит ущерб цели использования tee
.
Я знаю, что могу исправить это, добавив fflush(stdout)
после каждой операции печати в программе на С++. Но есть ли более чистый, более простой способ? Есть ли команда, которую я могу запустить, например, которая заставит stdout
быть буферизованным по строке даже при использовании канала?