tail -f
と似たプログラムを、ログファイルに追加された新しい行を監視して処理するプログラムC/C++でどのように実装できますか?ログウォッチャーの実装
3
A
答えて
5
fseek()を使用すると、ストリームのeof条件をクリアできます。本質的には、ファイルの終わりまで読み込み、しばらく待ってから、fseek()(位置を変更することなく)でeofをクリアします。洗濯、すすぎ、繰り返し。詳細はman fseek(3)を参照してください。
ここは、perlのようです。 perlの年代は、(求める)は、本質的に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
その後、別のセッションで:
wembley 0 /home/jj33/swap > echo "another line of text" >> tfile
そして元のプログラム出力へ:
Hit EOF, sleeping
Got: another line of text
Hit EOF, sleeping
0
あなたは尾を呼び出すと、アプリに戻ってストリームを取得し、またはそれはオープンソースだと、多分あなた自身のコードにそれを引っ張るために試みることができるのいずれか。
また、C++ iostreamでは、ファイルを開いて最後に読むだけで、最後の10〜20行をバッファリングして出力することができます。
0
あなたが探しているのは、c/C++のselect()呼び出しです。マニュアルページのコピーをここに見つけました:http://www.opengroup.org/onlinepubs/007908775/xsh/select.html。 Selectは、ファイルディスクリプタを引数としてとり、そのうちの1つが変更され、読み込みの準備ができたことを通知します。
0
テールプログラムはオープンソースなので、参考にすることができます。私は同じことを思って、しばらく前にコードを見て、それはかなりシンプルだと思っていましたが、私はどれほど複雑であるかに驚いていました。アカウントに入れなければならないことがたくさんあります。
関連する問題
- 1. リストのアレイベースの実装(カーソルの実装)
- 2. XMLドキュメントインターフェイスの実装とクラスの実装
- 3. Tomcat:java.security.Principalの実装
- 4. llvm.pow.f64の実装
- 5. パーシャルビューの実装
- 6. パーサーの実装
- 7. strncmpの実装
- 8. 角の実装
- 9. クヌースモリスプラットアルゴリズムの実装
- 10. ジグザグトライアングルトラバーサルの実装
- 11. INavigationServiceの実装
- 12. リクエストレスポンスデザインの実装
- 13. Ocamlの実装
- 14. ヒープソートの実装
- 15. ライセンスチェックライブラリの実装
- 16. Haskellの実装
- 17. Android:Dropboxの実装
- 18. スレッドの実装
- 19. ブロッキングキューの実装
- 20. ハッシュコードの実装
- 21. AllowColumnReorderの実装
- 22. Grails:SSOの実装
- 23. クラスの実装
- 24. BidirectionalGridLSTMの実装
- 25. ガロアカウンタモードの実装
- 26. ピーコックテストの実装
- 27. プログレスバークラスの実装
- 28. SmartyBCの実装
- 29. テキストエディタの実装
- 30. Rangefiltの実装