我想监视一个应用程序正在写入的日志文件。我想逐行处理文件,或者在它被写入之后不久。我还没有找到一种方法来检测到达 eof 后文件是否已扩展。
代码需要在 Mac 和 PC 上运行,并且可以使用任何语言,尽管我最熟悉 C++ 和 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 标志。
您应该可以使用从 tail -f 读取标准 io
我曾想过通过 tee 输出动作,然后拖尾(或使用上面的循环)由 tee 创建的文件有些用途。