=?iso-8859-1?q?=5Bcomm=5D_=F0=CF=DE=C5=CD=D5_=C2=D5=C6=C5=D2=C9=DA=C1=C3?= =?iso-8859-1?q?=C9=D1_=CD=C5=CE=D1=C5=D4_=D0=CF=D2=D1=C4=CF=CB_=D7=D9=D7?= =?iso-8859-1?q?=CF=C4=C9=CD=D9=C8_=D7_=C6=C1=CA=CC_=D3=D4=D2=CF=CB=3F?=
Henri Bourbon
=?iso-8859-1?q?useperl_=CE=C1_fastmail=2Efm?=
Пн Окт 28 05:22:41 MSK 2002
On 27 Oct 2002 13:53, Valentin Nechayev wrote:
>> Да, в свое время меня очень обескуражил этот эффект. Теперь с этим я
>> разобрался, непонятно же другое: почему буферизация может поменять
>> *порядок* выводимых в файл строк. Поясняю:
> Могут быть и более странные эффекты.
> Дело в том, что если буфера не сброшены явно, то они сбрасываются при
> выполнении exit(). А обычно libc построена так, что они сбрасываются
> в порядке обратном стандартному порядку перечисления, то есть stderr
> сбрасывается раньше, чем stdout.
[skip]
> 1. Из-за того, что не терминал, а пайп - буферизация идет поблочно, а не
> построчно.
> 2. Блоки для stdout и stderr разные.
> 3. Буфер для stderr сбрасывается раньше.
> А еще веселее получается, если stdout и stderr направлены в один пайп,
> а вывода по каждому из них больше чем стандартный размер буфера (обычно 4K,
> AFAIR). Когда буфер сбрасывается не по exit(), строки могут быть разрезаны
> пополам.
> На логи make это обычно не влияет потому, что от каждого процесса
> выдача короткая. Но тоже бывает (если, например, много ошибок и много
> нормального вывода).
Даже не ожидал получить столь фундаментальный ответ :-) Спасибо большое.
/* По правде говоря, я, непрограммист, кое-чего даже недопонял
(насчет логов make). Но это, может, просто потому, что сейчас 5 утра...
Высплюсь и утром доосмыслю :-) */
--
HB
Подробная информация о списке рассылки community