可能重复:
在 C++ 中实现“tail -f”
我正在向 C++ 应用程序添加一个新线程,该线程将单独负责“跟踪”特定日志文件。基本上,线程应该根据日志文件监视最后一次接收到某个消息的时间(或者换句话说,最后一次将某个短语写入文件的时间)。此消息的每个实例在日志文件中将如下所示:
(此处为时间戳)收到的心跳消息:...(此处有更多文本,但不重要)
如果接收到的两个时间戳之间的经过时间大于或等于 (2 * heartbeat interval) 秒,则线程应将此情况通知应用程序,并从那里应用程序将处理其余部分(这部分对于问题并不重要我在问)。我对此有一些疑问:
当另一个线程不断写入时,如何在这个新线程中读取日志文件?我不会遇到线程安全问题吗?有没有办法以共享模式读取文件?我正在阅读与此相关的其他问题,但找不到明确的答案。
我应该在这个新线程中实现某种计时器,每秒钟触发一次吗?我想我应该每(2 * 心跳间隔)秒触发一次,然后执行检查。
我将如何执行日志文件的实际拖尾?有没有办法从文件末尾开始并反向读取?我知道文件 I/O 很昂贵。那么我是否应该反向读取 x 个字节(换句话说,猜测我应该反向读取多远)并在该数据块中搜索时间戳/短语?