Принудительная линия -Буферизация стандартного вывода при подсоединении трубопровода к тройнику

Обычно stdoutбуферизуется строкой -. Другими словами, пока ваш аргумент printfзаканчивается новой строкой, вы можете ожидать, что строка будет напечатана мгновенно. Это не работает при использовании канала для перенаправления на tee.

У меня есть программа на C++ a, которая всегда выводит строки \n-. прекращено, на stdout.

Когда он запускается сам по себе(./a), все печатает правильно и в нужное время, как и ожидалось. Однако, если я передам это наtee(./a | tee output.txt), он ничего не печатает, пока не завершит работу, что противоречит цели использования tee.

Я знаю, что могу это исправить, добавляя fflush(stdout)после каждой операции печати в программе на C++. Но есть ли более чистый и простой способ? Есть ли команда, которую я могу запустить, например, которая заставит stdoutбуферизовать строку -даже при использовании канала?

102
задан RzR 23 January 2014 в 11:17
поделиться