Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Eugen J. Sobchenko                   2:5020/400     20 Oct 2002  02:00:20
 To : All
 Subject : в чем собственно ра  зница?!
 -------------------------------------------------------------------------------- 
 
 Приветствую читателей.
 
 Давеча наткнулся на проблему объяснение которой не смог найти.
 
 Пишу программу, читающую из fifo и или как "tail -f" из простого
 файла построчно. Складываю поступившие строки в @strings и обрабатываю их
 по очереди.
 Сначала подумал, что лучше будет читать read'ом все, что есть, 
 откладывать недочитанное и объединять с прочитанным при следующем 
 чтении:
 
 ... # открываем файл, все дела ...
 my $broken = '';
 while (1) {
 
     if ( (defined ($fh->read ( $buf, 2048 ))) and
         ( ( (length $broken) + (length $buf) ) > 0 ) ) {
 
         my $chunk = $broken . $buf;
         @strings = split /\012/, $chunk;
         $broken = (substr($chunk, -1) ne "\012" ? pop @strings : '');
     } else {
         # $log->print ( "we're in trouble" ); 
         sleep 1;
         $fh->sysseek(0, 1) unless $param->{isfifo}; # seek фифе не нужен
         next;
     }
 
   # обрабатываем строки в @strings...
   ...
 }
 
 Работает, но после чтения первой порции данных постоянно пропадает в else блоке.
 (?!стало быть read возвращает undef?!)
 
 Решил проблему альтернативным вариантом:
 
 ...
 while (1) {
     while ( $_ = $fh->getline ) { # тоже самое что и 'while ( <$fh> ) {'
         push @strings, $_;
     }
   
   sleep 1;
   $fh->sysseek(0, 1) unless $param->{isfifo};
 
   # обрабатываем ...
   ...
 }
 
 Этот вариант работает правильно как с простым файлом так и с fifo.
 Hо меня интересует - почему не работает первый?! В чем проблема 
 собственно?
 
 Спасибо.
 
 -- 
 Eugen J. Sobchenko, ejs@bsnis.com.ua
 3974 4469 2D4F 8A02 6AF4  FB0D 3568 3AE9 DB94 6BB3
 --- ifmail v.2.15dev5
  * Origin: PACOnet ISP (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 в чем собственно ра зница?!   Eugen J. Sobchenko   20 Oct 2002 02:00:20 
 Re: в чем собственно ра зница?!   Artem Chuprina   21 Oct 2002 13:31:30 
Архивное /ru.perl/11042e660e966.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional