ファイルとメモリを共有する

ファイルマッピングは、2つ以上のプロセス間でファイルまたはメモリを共有するために使用できます。 ファイルまたはメモリを共有するには、すべてのプロセスが同じファイルマッピングオブジェクトの名前またはハンドルを使用する必要があります。

ファイルを共有するために、最初のプロセスでは、 CreateFile 関数を使用してファイルを作成または開きます。 次に、 createfilemapping に 関数を使用してファイルマッピングオブジェクトを作成します。これには、ファイルハンドルとファイルマッピングオブジェクトの名前を指定します。 イベント、セマフォ、ミューテックス、待機可能タイマー、ジョブ、およびファイルマッピングオブジェクトの名前は、同じ名前空間を共有します。 そのため、別の型のオブジェクトによって使用されている名前を指定すると、 createfilemapping に 関数と openfilemapping に 関数は失敗します。

ファイルに関連付けられていないメモリを共有するには、プロセスで createfilemapping に 関数を使用し、 _ _ 既存のファイルハンドルではなく、 HFILE パラメーターとして無効なハンドル値を指定する必要があります。 対応するファイルマッピングオブジェクトは、システムのページングファイルによってサポートされるメモリにアクセスします。 Createfilemapping にの呼び出しで無効なハンドル値の hFile を指定する場合は、0より大きいサイズを指定する必要があり _ _ ます。

最初のプロセスによって作成されたファイルマッピングオブジェクトのハンドルを他のプロセスが取得する最も簡単な方法は、 openfilemapping に 関数を使用し、オブジェクトの名前を指定することです。 これは、 名前付き共有メモリ と呼ばれます。 ファイルマッピングオブジェクトに名前がない場合、プロセスは継承または複製によってハンドルを取得する必要があります。 継承と複製の詳細については、「 継承」を参照してください。

ファイルまたはメモリを共有するプロセスでは、 MapViewOfFile 関数または mapviewoffileex に 関数を使用してファイルビューを作成する必要があります。 これらのユーザーは、セマフォ、ミューテックス、イベント、またはその他の相互排他的な手法を使用して、アクセスを調整する必要があります。 詳細については、「 同期」を参照してください。

共有ファイルマッピングオブジェクトは、それを使用するすべてのプロセスが、 CloseHandle 関数を使用してハンドルを閉じるまで破棄されません。

ファイルマッピングオブジェクトのセキュリティについては、「 ファイルマッピングのセキュリティとアクセス権」を参照してください。

名前付き共有メモリの作成