2010-11-24 11 views
0

に書き込んでいる間、私は時間によって増加したファイルを持っているし、Windows上でC++で別のプロセスのどの競合状態か何かせずにファイルを読み取るために必要な読書します。ファイルの書き込みは、プロセス内のファイルの処理は、C++

が与えられ、そして、私はそれで遊ぶことができる余地がありません。私ができることは、それを優雅に読むことだけです。

このケースをうまく処理することをお考えですか?

TIAあなたはすべての作家が少なくとも読み取り共有アクセスでファイルを開き、すべての読者は、少なくとも書き込み共有アクセスでファイルを開くことを確認する必要がありますWin32ので

+0

CまたはC++?あなたの主題はCだと言い、あなたのキーワードはC++と言っています、あなたの身体は「... C++のプロセス...」と言います。 –

答えて

0

。読者が1人以上、またはライターが1人以上の場合は、さらに共有する必要があります。

CreateFileドキュメント、dwShareModeパラメータについてはこちらを参照してください。

0

あなたはほぼ確実にすべてのファイルを共有できるようにする(両方のプロセスにおいて)CreateFileを使用する必要があります。書き込みアプリケーションが排他共有モードでファイルを開き、ファイルを開いたままにしておくと、読み取りアプリケーションはファイルをまったく開くことができません。競合状態を防ぐそこから

は、かなり簡単です:それは、ファイルのそのセクション内のデータを使用しながら、各プロセスは、典型的には、排他的アクセスのためにファイルのセクションをロックするLockFileまたはLockFileExを使用します。一般的に、その期間はできるだけ短くしたいので、セクションをロックし、読み書きし、ロックを解除します。できるだけ早く(つまり、何もせずに、それを避けることができれば) )。

+0

ファイルの作成と追加がアプリケーションで行われているため、書き込みプロセスでCreateFileを使用できませんでした。レディングプロセスでのみCreateFileとLockFile(Ex)を使用して、レース状態がないことを保証できますか? –

+0

@ user518978:おそらく、書き込みアプリケーションの記述方法によって異なります。試行された書き込みの結果をチェックし、それに応じて反応すると、動作する可能性があります。 「盲目的に」書き込むと、それがうまくいくと思っているだけですが、失敗が表示されるかなりの公平な機会があります(書き込みが失敗し、データが失われるように再試行しません)。 –

関連する問題