3

重複の可能性:
C++ で「tail -f」を実装する

特定のログ ファイルの "テーリング" のみを担当する新しいスレッドを C++ アプリケーションに追加しています。基本的に、スレッドは、ログ ファイルに従って特定のメッセージが最後に受信された時刻 (つまり、特定のフレーズが最後にファイルに書き込まれた時刻) を監視する必要があります。このメッセージの各インスタンスは、ログ ファイルで次のようになります。

(ここにタイムスタンプ) 受信したハートビート メッセージ: ... (ここにさらにテキストがありますが、重要ではありません)

受信した 2 つのタイムスタンプ間の経過時間が (2 * ハートビート間隔) 秒以上の場合、スレッドはアプリケーションにこの状態を通知する必要があり、そこからアプリケーションが残りを処理します (この部分は質問にとって重要ではありません)。私は尋ねている)。これについていくつか質問があります。

  1. 別のスレッドが継続的に書き込みを行っているときに、この新しいスレッドでログ ファイルを読み取るにはどうすればよいですか? スレッドセーフの問題は発生しませんか? 共有モードでファイルを読み取る方法はありますか? これに関連する他の質問をここで読んでいましたが、これに対する明確な答えが見つかりませんでした。

  2. この新しいスレッドに、毎秒起動する何らかのタイマーを実装する必要がありますか? (2 * ハートビート間隔) 秒ごとに起動してから、チェックを実行する必要があると思います。

  3. ログ ファイルの実際のテーリングを実行するにはどうすればよいですか? ファイルの最後から開始して逆に読み取る方法はありますか? ファイル I/O が高価であることは知っています。では、x バイト量を逆方向に読み取り (つまり、逆方向にどこまで読み取る必要があるかを推測する)、そのデータ ブロック内でタイムスタンプ/フレーズを検索する必要がありますか?

4

0 に答える 0