Ответ 1
В Perl модуль File:: Tail делает именно то, что вам нужно.
Я хотел бы отслеживать файл журнала, который записывается приложением. Я хочу обработать файл по строкам, так как, или вскоре после этого, он написан. Я не нашел способ обнаружить, что файл был расширен после достижения eof.
Код должен работать на Mac и ПК и может быть на любом языке, хотя я больше всего знаком с С++ и Perl.
Есть ли у кого-нибудь предложение наилучшего способа сделать это?
В Perl модуль File:: Tail делает именно то, что вам нужно.
Достаточно общий ответ:
Большинство языков, на EOF, возвращают, что данные не были прочитаны. Вы можете повторить попытку чтения через интервал, и если файл вырос с тех пор, на этот раз операционная система вернет данные.
Сущность tail -f
- это следующий цикл:
open IN, $file;
while(1) {
my $line = <IN>;
if($line) {
#process line...
} else {
sleep(1);
seek(IN,0,1);
}
}
close IN;
seek вызов - очистить флаг EOF.
Вы должны иметь возможность использовать стандартную io из хвоста -f
Я бы подумал о выводе действий через tee, а затем tail'ing (или используя цикл выше), файл, созданный с помощью tee, используется некорректно.
Для Java см. эту замечательную статью
http://www.informit.com/guides/content.aspx?g=java&seqNum=226