2011-06-21 17 views
1

C++で最も速い方法は、別のプロセスによって書き込まれたファイルから新しい行を読み込むことです。または、ファイルに新しい行があることを私のプログラムに通知する方法は?新しい行が別のプロセスによって書き込まれたときにファイルから読み取る

+3

プロセス間通信のファイルが必要ですか?代わりにパイプを使用してください。パイプはそれらの内部のデータについて通知するメカニズムを持っていますが、ファイルにはありません。 – Raiv

答えて

1

最も速い方法は、パイプやイベントを使用することです(Windowsアプリケーションの場合)。

まだファイルを使用したい場合は、まずファイルが実際に変更されていることを確認してください(シークしてprew値と比較してください)。 「最後の探求の価値」に行き、それを読むよりも。

そして、mutexを使うのが良いでしょう(ファイルからデータを読み込む場合)。

+0

私にサンプルコードを与えることは可能ですか? – user562549

+0

実際、それは些細な状況です。非常に単純な例があります。外部のアプリケーションがファイルから最後のデータを(同期なしで)読み取る方法は、[link](http://goo.gl/eAO2g)です。より詳細な情報源が必要な場合は、教えてください。 –

1

OSが同時ファイルアクセスをサポートしていると仮定すると、EOFを求めて、statが変更されるのを待ってからファイルから読み込もうとする必要があります。あなたはループを遅くするために睡眠を追加したいかもしれません。

POISX(-fオプション付き)の 'tail'コマンドは、 - source code is availableを実装しています。

+1

私はこの回答が役立つことに躊躇して同意します。しかし、95%が言うには、OPにはソケット/パイプ/ [プロセス間(名前付き)セマフォ](http://msdn.microsoft.com/en-us/library/ms684326(v=vs.85)asp)などが必要です – sehe

0

私の頭の上から、uがこのような何かを試してみました:

は、それを保存、ファイルの行をカウントします。 ファイルのサイズを取得してください(私は、私は楽しいを破棄したくない:D)。 次に、ファイルのサイズが変わったときに最後に保存された行を読み込みます。何度も繰り返します。

は、ファイルの変更についての通知を取得するために

0

使用inotify :)楽しみを持ってして、ファイルは今までに、次に大きい場合には、あなたの最後のPOSから再度読み込みます。

関連する問題