=?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?=
Пт Окт 25 21:20:14 MSD 2002


On 25 Oct 2002  19:40, Sergey Vlasov wrote:

> xxxxxxxx 2>&1 | tee file

> Со многими программами в этом случае возникает проблема с буферизацией
> вывода - когда программа обнаруживает, что stdout направлен не на
> терминал, вывод начинает идти с использованием буфера, поэтому выходные
> строки могут появляться кучами с паузой между ними.

Да,   в  свое  время меня очень обескуражил этот эффект. Теперь с этим я
разобрался,  непонятно  же  другое:  почему  буферизация  может поменять
*порядок* выводимых в файл строк. Поясняю:

$ perl -we 'print "1-STDOUT\n"; warn "2-STDERR\n";'
1-STDOUT
2-STDERR

Что  может  быть  проще?  Сначала  печатаем  строку 1 в один файл, затем
строку  2  в  другой.  Т.  к.  оба  файла  оказываются  одним  и  тем же
(терминалом,  или,  грубо говоря, просто экраном), то сначала печатается
строка 1, затем -- строка 2. Как же может быть иначе? Ан нет, подключаем
перенаправления, получаем:

$ perl -we 'print "1-STDOUT\n"; warn "2-STDERR\n";' >out 2>&1
$ cat out
2-STDERR
1-STDOUT

Странно! Почему так?.. ладно, выключаем буферизацию:

$ perl -we '$| = 1; print "1-STDOUT\n"; warn "2-STDERR\n";' >out 2>&1
$ cat out
1-STDOUT
2-STDERR

Теперь все нормально... Каким же волшебным образом буферизация влияет на
то, в каком порядке стоки попадут в файл?

-- 
HB




Подробная информация о списке рассылки community