_DEN_ для чего сабж и что с ним делать? Функциональность и завязка на stderr аналогична cerr. Только сообщения clog не сразу попадают на устройство вывода (обычно ассоциированное с дисплеем), а по заполнению внутреннего буфера. Если после каждого << делать flush, то будет аналог cerr.
_DEN_ > пора флюшнуцца q_q > по заполнению внутреннего буфера в чем прикол такого поведения? С одной стороны буферизированный вывод быстрее, т.к. обращение к физическому устройству происходит по мере необходимости. С другой стороны, если программа вылетела, нет гарантии, что все сообщения попадут на устройство.
q_q Что такое буфферизованный и сквозной ввод/вывод я знаю)) Мне интересно в чем прикол делать буферизованным именно эрроровый пайп? cout ведь не делится на сквозной и буферизованый. Зачем cerr разделили? Или почему не разделили cout?
_DEN_ Надо спрашивать авторов. Мое объяснение такое. Стандартных потоков вывода три (stdaux не в счет) - stdout, stderr и stdprn. Первый ассоциируется с информационными сообщениями для пользователей. Второй, с сообщениями об ошибках для пользователей и разработчиков. Третий с "жесткой" копией информации. Лог ассоциируется с технологическими сообщениями для разработчиков, не путать с информационными сообщениями, которые информируют пользователя о протекании какого-либо длительного процесса. По принципу ориентированности на разработчиков логу роднее stderr.
представь себе apache на c++. так вот, такой гипотетический апач, вместо того, чтобы пользоваться функцией syslog для логирования своей работы (он вероятнее пользуется какой-то своей обёрткой syslog), мог бы свободно выводить в std::clog.
r90 Бугаго)) А еще он бы мог выводить в std::cout, std::cerr, std::ofstream, std::wofstream, std::ostream, .... и еще в 50 мест. И ЧТО?
_DEN_ Вот что случается с теми, кто не любит читать Страуструпа Ты же понимаешь разницу между обычным и буферизированным выводом, чем тебя не устраивает наличие clog'a как буферизированного варианта cerr'a?
ДА НИЧЕГО! замечу в std::ofstream отправить что-то сложно это просто стандартное имя для отправки логов. по дефолту идёт в консоль, а не в syslog, просто потому, что, имхо, syslog довольно-таки платформозависимая фича. может ещё, может быть, потому, что всё-таки отлаживать удобнее когда всё кладётся в одну кучу, не засирая при этом системный лог. в чём разница между логами и ошибками q_q описал -- это мало того, что вполне оправдывает буферизацию, так ещё и на мысли должно наводить о том, что пихать логи в тот же поток, куда и ошибки не всегда кошерно. или тебе ещё рассказать какой резон тому же apache закрывать дескрипторы 0, 1, 2 после завершения инициализации -- чтения всяких-там конфигов, и проверки их работоспособности?
IceStudent Я не говорю что он меня не устраивает. Я же написал: почему с std::cout и std::cerr обошлись по-разному. Последний разделили на буфферизованный и сквозной, а первый - нет. Если такое решение было принято комитетом по стандартизации С++, я думаю это не просто так. На это были какие-то причины. Вот именно эти причины меня и интересутуют. А как там рабоает апач, сколько травы скурил Страуструп и как выучить С++ за 21 день - мне совершенно по барабану. Меня не интересуют прикладные вопросы. Меня интересует сам язык.