Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 实现日志监视程序_C++_C_File_Io - Fatal编程技术网

C++ 实现日志监视程序

C++ 实现日志监视程序,c++,c,file,io,C++,C,File,Io,我想知道如何在C/C++中实现一个类似于tail-f的程序,一个监视和处理添加到日志文件中的新行的程序? 您可以调用tail并将流检索回您的应用程序中,或者由于它是开源的,您可以尝试将其拉入自己的代码中 也可以在C++ iOSWATE中打开一个文件,只查看,只读取最后一个,同时缓冲最后10-20行,然后输出.,可以使用FSEKE()来清除流上的EOF条件。从本质上讲,读取到文件末尾,休眠一段时间,fseek()(不改变位置)要清除eof,请再次读取到文件末尾。清洗,漂洗,重复。有关详细信息,请参

我想知道如何在C/C++中实现一个类似于
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