|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Smirnov 2:5080/149 26 Aug 2001 15:13:46 To : All Subject : How to flush buffers on handles? -------------------------------------------------------------------------------- Че совсем понимаю, как вырубить буферизацию... Усть скрипт типа: open td, "tcpdump -n |"; while ( <td> ) { chop; print "$_\n"; } close td; Чо фича в том, что он выдаЦт собираемые tcpdump`ом данные пачками по нескольку десятков строк. Что мне нежелательно... Шак сделать, чтобы тело цикла выполнялось сразу после прихода очередной строки? Читал perldoc perlvars, perldoc -f getc, не очень понятно там написано. С внешне-вызываемой stty не хочется связываться, к тому же ей нужен дескриптор файла, а у меня только хэндл (или наоборот, не помню терминологию). Яналогичная проблема (хотя на вывод), но тут я и вовсе пас: у меня в проге есть простейшая функция logger, которая просто пишет в определЦнном формате данные в лог-хэндл, открытый при начале работы скрипта. Ы вот, проблема такая, что вызов logger`а в одной части программы не приводит к немедленному сбрасыванию буфера на файл (проверяется путЦм смотрения вьюером в другом процессе), а в другой части - приводит (и естественно сбрасываются все данные собранные в первом случае). Жайл открывается просто: "open log_f, ">>", $filename;", после этого с хэндлом ничего не делается... ╗ереводы строки делаются процедурой logger, так что я совсем в непонятках, ибо по умолчанию вывод - line-buffered. -- Andrey Smirnov, http://pioneer.convex.ru/~amis/ Yekaterinburg, Russia. --- ifmail v.2.14-tx8.10 * Origin: AMS Station BBS (2:5080/149@fidonet) бЕПМСРЭЯЪ Й ЯОХЯЙС РЕЛ, ЯНПРХПНБЮММШУ ОН: БНГПЮЯРЮМХЕ ДЮРШ СЛЕМЭЬЕМХЕ ДЮРШ РЕЛЮ ЮБРНП
юПУХБМНЕ /ru.perl/9227fbca2aa7.html, НЖЕМЙЮ ХГ 5, ЦНКНЯНБ 10
|