9

データ ファイルのセットを読み取り、いくつかのモデル計算を実行するアプリケーションがあります。プログラムはデータ ファイル自体を変更する必要がないため、現在、以下に示すように読み取り専用フラグを使用してそれらを開いています。

FILE* file;
if(_wfopen_s(&file, fname.c_str(), L"r") == 0)
...

プログラムの複数のインスタンスを同時に実行し、同じデータ セットを使用して、データに対して異なる計算を実行したいと考えています。データ ファイルを変更する必要のあるプログラムはありません。データ ファイルが非常に大きいため、各プログラムで使用するデータの個別のコピーを作成することはできません。

読み取り専用のアクセス許可でファイルを開いているため、2 つのプログラムが同じファイルから同時に読み取りを行っている可能性があると想定しました。代わりに、「別のプロセスで使用されているため、ファイルを開くことができませんでした」という行に沿ってさまざまなエラーが発生します。

私の開発環境は Windows 7 であるため、この質問は、読み取り共有を有効にすることの問題である可能性があることを示唆していますただし、そのスレッドのすべての回答はCreateFileに依存していますが、私は stdio.h で記述されたレガシー コードを扱っています。

関数の fopen クラスを使用して、ファイルから複数のプログラムを同時に読み取る方法はありますか?

4

1 に答える 1

6

fopenルーチンを変更できる場合は、読み取り/書き込みを共有するために、fopen呼び出しを, に置き換えてみてください。mscrt 固有です。_fsopen_fsopen

を使用できCreateFile、読み取り/書き込み用にすべてのレガシー コードを書き直したくない場合は、 をFILE *winapi ファイル ハンドルに関連付けてみることもできます。_open_osfhandleによって返されたファイル ハンドルからファイル記述子を取得するために使用しCreateFile、次にそのファイル記述子から_fdopenを取得するために使用しFILE *ます。

于 2012-07-19T18:23:55.477 に答える