Чтение данных из файла журнала в виде отдельного приложения записывает на него

Я хотел бы отслеживать файл журнала, который записывается приложением. Я хочу обработать файл по строкам, так как, или вскоре после этого, он написан. Я не нашел способ обнаружить, что файл был расширен после достижения eof.

Код должен работать на Mac и ПК и может быть на любом языке, хотя я больше всего знаком с С++ и Perl.

Есть ли у кого-нибудь предложение наилучшего способа сделать это?

Ответ 1

В Perl модуль File:: Tail делает именно то, что вам нужно.

Ответ 2

Достаточно общий ответ:

Большинство языков, на EOF, возвращают, что данные не были прочитаны. Вы можете повторить попытку чтения через интервал, и если файл вырос с тех пор, на этот раз операционная система вернет данные.

Ответ 3

Сущность 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.

Ответ 4

Вы должны иметь возможность использовать стандартную io из хвоста -f

Ответ 5

Я бы подумал о выводе действий через tee, а затем tail'ing (или используя цикл выше), файл, созданный с помощью tee, используется некорректно.