我想知道如何在C / C++中实现类似于tail -f的程序,该程序监视并处理添加到日志文件中的新行?

最佳答案

您可以使用fseek()清除流中的eof条件。本质上,读取到文件末尾,休眠一会儿,fseek()(不更改位置)以清除eof,然后再次读取到文件末尾。洗涤,漂洗,重复。有关详细信息,请参见man fseek(3)。

这就是perl中的样子。 perl的seek()本质上是fseek(3)的包装,因此逻辑是相同的:

wembley 0 /home/jj33/swap >#> cat p
my $f = shift;
open(I, "<$f") || die "Couldn't open $f: $!\n";

while (1) {
  seek(I, 0, 1);
  while (defined(my $l = <I>)) {
    print "Got: $l";
  }
  print "Hit EOF, sleeping\n";
  sleep(10);
}
wembley 0 /home/jj33/swap >#> cat tfile
This is
some
text
in
a file
wembley 0 /home/jj33/swap >#> perl p tfile
Got: This is
Got: some
Got: text
Got: in
Got: a file
Hit EOF, sleeping

然后,在另一个 session 中:
wembley 0 /home/jj33/swap > echo "another line of text" >> tfile

并返回到原始程序输出:
Hit EOF, sleeping
Got: another line of text
Hit EOF, sleeping

关于c++ - 实现日志观察器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22379/

10-10 11:57