=?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