C++ 实现日志监视程序
我想知道如何在C/C++中实现一个类似于C++ 实现日志监视程序,c++,c,file,io,C++,C,File,Io,我想知道如何在C/C++中实现一个类似于tail-f的程序,一个监视和处理添加到日志文件中的新行的程序? 您可以调用tail并将流检索回您的应用程序中,或者由于它是开源的,您可以尝试将其拉入自己的代码中 也可以在C++ iOSWATE中打开一个文件,只查看,只读取最后一个,同时缓冲最后10-20行,然后输出.,可以使用FSEKE()来清除流上的EOF条件。从本质上讲,读取到文件末尾,休眠一段时间,fseek()(不改变位置)要清除eof,请再次读取到文件末尾。清洗,漂洗,重复。有关详细信息,请参
tail-f
的程序,一个监视和处理添加到日志文件中的新行的程序?
您可以调用tail并将流检索回您的应用程序中,或者由于它是开源的,您可以尝试将其拉入自己的代码中
也可以在C++ iOSWATE中打开一个文件,只查看,只读取最后一个,同时缓冲最后10-20行,然后输出.
,可以使用FSEKE()来清除流上的EOF条件。从本质上讲,读取到文件末尾,休眠一段时间,fseek()(不改变位置)要清除eof,请再次读取到文件末尾。清洗,漂洗,重复。有关详细信息,请参见第(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
并返回到原始程序输出:
Hit EOF, sleeping
Got: another line of text
Hit EOF, sleeping
我认为您需要的是c/c++中的select()调用。我在此处找到了手册页的副本:。Select将文件描述符作为参数,并告诉您其中一个描述符何时已更改并准备好读取。tail程序是开源的,因此您可以引用它。我也想知道同样的事情,不久前我看了看代码,认为它会很简单,但我惊讶于它有多么复杂。有很多问题需要考虑
Hit EOF, sleeping
Got: another line of text
Hit EOF, sleeping