中村です。

At 01 Aug 2003 01:01:38 +0900 S.Suzuki wrote:
> 最初のプロセス100バイト。後から別のプロセスが5000バイトをマッピング
> すると、後のプロセスが、4097バイト目をアクセスした時点で
> 不正なアクセスで落ちてしまいます(ノーマルファイルでもページファイルでも)。
> 最初の100バイトは確かに超えていますが、おそらくページサイズ単位で
> マッピングされているので、2回目の5000バイト(2ページ分)は
> 正しくマッピングされていないということだと思います。
> #ちなみにノーマルファイルの場合、フォルダー上のファイルサイズ自体は
>   ちゃんと5000バイトになっているのですが。。。

> <勝手な予想>
> CreateFileMappingのサイズの指定は、一番最初に
> 行ったときだけ有効で、後から同じマッピングの名前を指定した場合は
> 最初の値が適用されるだけで、サイズの指定に意味はないのではないか?
> (最初より小さい場合は有効かもしれませんが)
> と考えています。
> </勝手な予想>

<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/createfilemapping.asp>

には、

> If this parameter matches the name of an existing named mapping object,
> the function requests access to the mapping object with the protection
> specified by flProtect.

と書いてありますので、他のパラメータは無視されると考えた方が良いのかもしれ
ません。

<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/sharing_files_and_memory.asp>

などをみると、二つ目以降のプロセスではOpenFileMappingを使うことを推奨して
いるように見えますし。

しかし、ファイルのサイズが増えてしまうのはなぜなんでしょう。そっちがバグな
のかもしれませんね。


-- 
Satoshi Nakamura <s...@zak.att.ne.jp>