У меня есть приложение C++ (на Solaris 10), которое показывает вывод журнала на основе транзакций в хронологическом порядке. Например, перед установкой соединения с сервером базы данных он печатает в stdout как: «Подключение к БД», а после вызова для подключения, в случае успеха, говорит «Подключено к БД», если не удалось, пишет: «Не удалось подключиться к БД». " и так далее. Теперь, когда приложение запускается, вывод (stdout) перенаправляется в файл журнала, как показано ниже:
appl > app.log
И на другом сеансе, чтобы увидеть, что происходит, я вижу следующее:
tail -f app.log
Команда tail -f
должна выполняться в бесконечном цикле, засыпать на секунду, а затем пытаться читать и копировать строки из app.log и отображать их на консоли. Это помогает следить за тем, что происходит в app.log. Хотя я вижу, что порядок выходных данных сохраняется, я вижу, что иногда выходные данные объединяются в несколько строк в виде фрагмента, а затем ожидают, и это происходит не в режиме реального времени. Это из-за режима сна и вытягивания tail -f? Пожалуйста, помогите мне понять, почему это не в реальном времени. Или есть другой способ получить ощущение реального времени?
std::endl
илиstd::flush
? - person Galik   schedule 16.10.2015tail
чтении из файла (что, безусловно, является проблемой), также могут быть задержки при фактической записи ОС в файл. Буферизируется не только вывод программы, операционная система также имеет буферы при записи файлов на диск (и тогда буферы есть и у оборудования). Вся эта буферизация может означать, что данные не сразу записываются на диск. - person Some programmer dude   schedule 16.10.2015