次の方法で共有


ファイル マッピング オブジェクトの作成

Windows でファイル マッピング オブジェクトを作成するには、 CreateFile 関数を使用してファイルを開く必要があります。 このプロセスを使用すると、効率的なアクセスと操作のために、ファイルの内容をメモリに直接マップできます。 他のプロセスがマップされているファイルの部分に書き込むことができないようにするには、排他アクセスでファイルを開く必要があります。 さらに、プロセスでファイル マッピング オブジェクトが不要になるまで、ファイル ハンドルは開いたままにする必要があります。 排他アクセスを取得する簡単な方法は、CreateFilefdwShareMode パラメーターにゼロを指定することです。 CreateFile によって返されるハンドルは、CreateFileMapping 関数によってファイル マッピング オブジェクトを作成するために使用されます。

CreateFileMapping 関数は、ファイル マッピング オブジェクトへのハンドルを返します。 このハンドルは、共有メモリにアクセスできるように ファイル ビューを作成 するときに使用されます。 CreateFileMapping を呼び出すときは、オブジェクト名、ファイルからマップされるバイト数、およびマップされたメモリの読み取り/書き込みアクセス許可を指定します。 CreateFileMapping を呼び出す最初のプロセスでは、ファイル マッピング オブジェクトが作成されます。 既存のオブジェクトの CreateFileMapping を呼び出すプロセスは、既存のオブジェクトへのハンドルを受け取ります。 GetLastError 関数を呼び出すことで、CreateFileMapping の呼び出しが正常に行われたか、ファイル マッピング オブジェクトを作成または開いたかを確認できます。 GetLastError は 、作成プロセスに NO_ERROR を返し、後続のプロセスに ERROR_ALREADY_EXISTS します。

CreateFileMapping 関数は、CreateFile 関数がファイルを開いたときに指定されたアクセス フラグと競合する場合に失敗します。 たとえば、ファイルの読み取りと書き込みを行う場合は、次のようにします。

  • CreateFilefdwAccess パラメーターにGENERIC_READGENERIC_WRITEの値を指定します。
  • CreateFileMappingfdwProtect パラメーターにPAGE_READWRITE値を指定します。

ファイル マッピング オブジェクトを作成しても、物理メモリはコミットされず、予約されるだけです。

ファイルマップのサイズ

ファイル マッピング オブジェクトのサイズは、マップされるファイルのサイズとは無関係です。 ただし、ファイル マッピング オブジェクトがファイルよりも大きい場合は、 CreateFileMapping が返される前にファイルが展開されます。 ファイル マッピング オブジェクトがファイルよりも小さい場合、システムは指定されたバイト数のみをファイルからマップします。

CreateFileMappingdwMaximumSizeHigh パラメーターと dwMaximumSizeLow パラメーターを使用すると、ファイルからマップするバイト数を指定できます。

  • ファイルのサイズを変更しない場合 (読み取り専用ファイルのマッピング時など)、 CreateFileMapping を呼び出し、 dwMaximumSizeHighdwMaximumSizeLow の両方に 0 を指定します。 これにより、ファイルとまったく同じサイズのファイル マッピング オブジェクトが作成されます。 それ以外の場合は、ファイル マッピング オブジェクトのサイズが静的であるため、完成したファイルのサイズを計算または見積もる必要があります。一度作成すると、サイズを増減することはできません。 この方法で長さが 0 のファイルをマップしようとすると、エラー コード ERROR_FILE_INVALIDで失敗します。 プログラムは、長さが 0 のファイルをテストし、そのようなファイルを拒否する必要があります。

  • 名前付きファイルによってサポートされるファイル マッピング オブジェクトのサイズは、ディスク領域によって制限されます。 ファイル ビューのサイズは、予約されていない仮想メモリの使用可能な最大連続ブロックに制限されます。

選択するファイル マッピング オブジェクトのサイズは、メモリ マッピングを使用してファイルを "表示" できる距離を制御します。 サイズが 500 Kb のファイル マッピング オブジェクトを作成した場合、ファイルのサイズに関係なく、ファイルの最初の 500 KB にのみアクセスできます。 より大きなファイル マッピング オブジェクトを作成するためのシステム リソースのコストはかからないため、ファイル全体を表示しない場合でも、ファイルのサイズであるファイル マッピング オブジェクトを作成します (CreateFileMappingdwMaximumSizeHigh パラメーターと dwMaximumSizeLow パラメーターを両方とも 0 に設定します)。 システム リソースのコストは、ビューを作成してアクセスする場合に発生します。

ファイルの先頭から始まらない部分を表示できます。 詳細については、「 ファイル内でのビューの作成」を参照してください。

ファイル ビューの作成

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