From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Fri, 25 Oct 2002 21:20:14 +0400 From: Henri Bourbon X-Mailer: The Bat! (v1.60m) Personal X-Priority: 3 (Normal) Message-ID: <18541747015.20021025212014@fastmail.fm> To: community@altlinux.ru In-Reply-To: <20021025194035.401ec5c0.vsu@altlinux.ru> References: <20021025130958.9BADC2EE5D@mail.off-club.com> <20021025232452.670a4295.sinom@ktk.ru> <20021025194035.401ec5c0.vsu@altlinux.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 8bit Subject: [Comm] Почему буферизация меняет порядок выводимых в файл строк? Sender: community-admin@altlinux.ru Errors-To: community-admin@altlinux.ru X-BeenThere: community@altlinux.ru X-Mailman-Version: 2.0.9 Precedence: bulk Reply-To: community@altlinux.ru List-Unsubscribe: , List-Id: List-Post: List-Help: List-Subscribe: , List-Archive: Archived-At: List-Archive: List-Post: 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