質問: CreateFileMappingを使った共有メモリの設計について教えてください。 【前提条件】 共有メモリを使用するプロセスは4つあります。 A:親プロセス、B~D:子プロセス A~Dすべてのプロセスで、共有メモリを扱うクラスは全く同じソースコードを使用します。 共有メモリを扱うクラスでは、共有メモリの作成・破棄・データ読込・データ書込をしています。 【現在】 Aの親プロセスで共有メモリを生成していました。(CreateFileMapping使用) B~Cの子プロセスは、親プロセスが作った共有メモリにアクセス(データの読み書き)をしていました。 【これからやりたいこと】 Aの親プロセスが毎回必ず共有メモリを生成するのではなく、 最初に共有メモリにアクセスしたプロセスが共有メモリに対してアクセスするようにしたいです。 この場合、共有メモリ作成処理でどのようなコードを書けば これからやりたいことを実現することができるのか、教えてください。
回答: CreateFileMapping > > If the function succeeds, the return value is a handle to the newly created file mapping object. > > > If the object exists before the function call, the function returns a handle to the existing object (with its current size, not the specified size), and GetLastErrorreturns ERROR_ALREADY_EXISTS. > > > 関数成功時は新しく作ったマッピングオブジェクトのハンドルを返します。 **オブジェクトが関数呼び出しの前に存在する場合、関数は既存のオブジェクトへのハンドル(指定されたサイズではなく現在のサイズ)を返し、GetLastErrorはERROR_ALREADY_EXISTSを返します。** との事なので、開くのも作成するのも気にせずに`CreateFileMapping`使えばよいです。