如何在C ++中拖尾日志文件?

时间:2013-01-23 16:54:55

标签: c++ tail

  

可能重复:
  Implement “tail -f” in C++

我正在向C ++应用程序添加一个新线程,该应用程序将单独负责“拖尾”特定的日志文件。基本上,线程应该根据日志文件(或者换句话说,上次将某个短语写入文件)监视上次接收到某个消息的时间。此消息的每个实例在日志文件中都显示如下:

(此处为时间戳) 收到心跳消息:...(此处更多文字,但不重要)

如果收到的两个时间戳之间的经过时间大于或等于(2 *心跳间隔)秒,则线程应通知应用程序此条件,然后应用程序将处理其余时间(此部分不重要)对于我提出的问题)。我对此有一些疑问:

  1. 当另一个线程连续写入时,如何在这个新线程中读取日志文件?我不会遇到线程安全问题吗?有没有办法在共享模式下读取文件?我正在阅读与此相关的其他问题,但无法找到明确答案。

  2. 我应该在这个新线程中实现某种类型的计时器吗?我想我应该只启动每个(2 *心跳间隔)秒,然后执行检查。

  3. 如何执行日志文件的实际拖尾?有没有办法从文件的末尾开始并反向读取?我知道文件I / O很贵。那么我应该反向读取x个字节数(换句话说,猜测我应该反向读取多远)并在该数据块中搜索时间戳/短语吗?

0 个答案:

没有答案