8

我想监视一个应用程序正在写入的日志文件。我想逐行处理文件,或者在它被写入之后不久。我还没有找到一种方法来检测到达 eof 后文件是否已扩展。

代码需要在 Mac 和 PC 上运行,并且可以使用任何语言,尽管我最熟悉 C++ 和 Perl。

有人对最好的方法提出建议吗?

4

5 回答 5

7

在 Perl 中,File::Tail模块完全符合您的需要。

于 2008-09-15T13:25:48.533 回答
3

一个足够通用的答案:

大多数语言在 EOF 上返回没有读取数据。您可以在间隔后重新尝试读取,如果文件已经增长,这一次操作系统将返回数据。

于 2008-09-15T13:28:33.470 回答
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 标志。

于 2008-09-15T14:34:05.810 回答
2

您应该可以使用从 tail -f 读取标准 io

于 2008-09-15T13:29:25.420 回答
0

我曾想过通过 tee 输出动作,然后拖尾(或使用上面的循环)由 tee 创建的文件有些用途。

于 2008-09-15T15:34:27.130 回答