次の方法で共有


ファイル ビューの作成

ファイルのデータをプロセスの仮想メモリにマップするには、ファイルのビューを作成する必要があります。 MapViewOfFile 関数と MapViewOfFileEx 関数は、CreateFileMapping によって返されるファイル マッピング オブジェクト ハンドルを使用して、プロセスの仮想アドレス空間内のファイルまたはファイルの一部のビューを作成します。 CreateFileMapping がファイル マッピング オブジェクトを作成したときに指定されたアクセス フラグと競合する場合、これらの関数は失敗します。

MapViewOfFile 関数は、ファイル ビューへのポインターを返します。 MapViewOfFile で指定されたアドレスの範囲内のポインターを逆参照することで、アプリケーションはファイルからデータを読み取り、ファイルにデータを書き込むことができます。 ファイル ビューに書き込みを行うと、ファイル マッピング オブジェクトが変更されます。 ディスク上のファイルへの実際の書き込みは、システムによって処理されます。 データは、ファイル マッピング オブジェクトの書き込み時には実際には転送されません。 代わりに、一般的なシステム パフォーマンスを向上させるために、ファイルの入出力 (I/O) の多くがキャッシュされます。 FlushViewOfFile 関数を呼び出して、システムがディスク トランザクションを直ちに実行するように強制することで、アプリケーションはこの動作をオーバーライドできます。

MapViewOfFileEx 関数は MapViewOfFile 関数とまったく同じように機能しますが、プロセスでは、プロセスの仮想アドレス空間内のファイルのビューのベース アドレスを lpvBase パラメーターで指定できる点が除きます。 指定したアドレスに十分な領域がない場合、呼び出しは失敗します。 したがって、複数のプロセスで同じアドレスにファイルをマップする必要がある場合、プロセスは適切なアドレスをネゴシエートする必要があります。 lpvBase パラメーターは、システム メモリ割り当て粒度の整数の倍数である必要があります。または、呼び出しが失敗します。 システムのメモリ割り当て粒度を取得するには、 GetSystemInfo 関数を使用します。この関数は、 SYSTEM_INFO 構造体のメンバーを格納します。

アプリケーションは、同じファイル マッピング オブジェクトから複数のファイル ビューを作成できます。 ファイル ビューは、派生元のファイル マッピング オブジェクトとは異なるサイズにすることができますが、ファイル マッピング オブジェクトよりも小さくする必要があります。 MapViewOfFiledwOffsetHigh パラメーターと dwOffsetLow パラメーターで指定されるオフセットは、システムの割り当て粒度の倍数である必要があります。

ファイル内でのビューの作成