人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

CREATEFILEMAPPINGについて教えてください。以下はサンプルのCのコードです。これはリードで開いています。別のプログラムでライトで同様に変数やファイル名で開くとお互いにデータの共有が可能です。ちなみにREAD_WRITEで最初に開いて、その後、以下のコードを含むEXEでREAD ONLYで開いた後、READ_WRITEのEXEを落としてももう一方でアクセス可能です。

このことから以下のコードを実行した後、上記説明の2つのEXEを落としてもWINDOWSはSHAREできるファイルを保持し続けているのでしょうか?

CREATEFILEMAPPING/MapViewOfFileの正しい動きを理解してないためお聞きしています。

よろしくお願いします。

hShare7 = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, FILE_MAP_READ,0, 1024, strShareName7);
shmem7 = (char*)::MapViewOfFile(hShare7, FILE_MAP_READ, 0, 0, 1024);

●質問者: mai_mai_mail
●カテゴリ:コンピュータ インターネット
✍キーワード:Char exe Share Windows アクセス
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kn1967
●35ポイント ベストアンサー

(1)OS管理下に置かれる

CreateFileMapping 関数

INVALID_HANDLE_VALUE を指定した場合、呼び出し側プロセスは dwMaximumSizeHigh と dwMaximumSizeLow の各パラメータを使ってマッピングオブジェクトのサイズも指定しなければなりません。この場合、CreateFileMapping は指定されたサイズのファイルマッピングオブジェクトを作成しますが、ファイルシステム内の名前付きファイルではなく、オペレーティングシステムのページングファイルに関連付けます。


(2)OSに「消して」と頼まない限り居残り続ける

UnmapViewOfFile 関数

関連するファイルの最後のビューをアンマップするまでは、システムはそのファイルを引き続き開いておきます。


(3)OSシャットダウン時には、OSによって全てアンマップされ消え去る。


私自身、この程度までしか理解しておりませんが、参考になりますでしょうか?


2 ● espresso3389
●35ポイント

第一引数(hFile)にINVALID_HANDLE_VALUEを指定されていますが、

MSDNのCreateFileMappingの説明によると、

hFile パラメータでINVALID_HANDLE_VALUEを指定した場合、呼び出し側プロセスは dwMaximumSizeHigh と dwMaximumSizeLow の各パラメータを使ってマッピングオブジェクトのサイズも指定しなければなりません。この場合、CreateFileMapping は指定されたサイズのファイルマッピングオブジェクトを作成しますが、ファイルシステム内の名前付きファイルではなく、オペレーティングシステムのページングファイルに関連付けます。複製、継承、名前の指定のいずれかより、ファイルマッピングオブジェクトを共有することもできます。

とあります。つまり、「オペレーティングシステムのページングファイル」の一部が利用されているという事みたいです。


一方で、基本的な話に戻れば、現代的なオペレーティングシステムにおいては、基本的に、仮想メモリという仕組みがあり、メモリとファイルは基本的には同じ仕組みであると考えた方が良いです。ファイルの読み込みとは、ファイルをメモリにマップ(無理に日本語にすると、反映)することであり、CreateFileMappingはそれを明示的にやっているに過ぎません。逆に、メモリが不足した場合には、メモリはファイルに書き出されて、物理メモリを消費しない状態になります(スワップアウトされる)。その後、そのメモリの情報が再度必要になれば、ファイルからメモリに情報が読み込まれる(マップされる)だけです。


従って、厳密なことを言えば、CreateFileMappingの第一引数がINVALID_HANDLE_VALUEの場合に、本当は、その情報が物理メモリ上に存在するのか、あるいは、ファイルとして存在しているのかは、空きメモリ状況などに依存します。うまくいけば、単純にメモリが複数プロセスで共有されているだけかもしれませんし、運が悪ければ、各プロセスがファイルを読み書きしているのと変わらないかもしれません。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ