アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語の初心者ですが、ファイルマッピングについて教えて頂きたいことがあります。

あるファイルをMapViewOfFileを使用し、複数タスクの共有メモリとして使用中に、
クローズせずに再マッピング(?)みたいなことはできないでしょうか?

例えば、マッピングするAというファイルの内容が、変数A=0、変数B=0、変数C=0、としてOpenFileMapping(FILE_MAP_ALL_ACCESS)されている。
次に、Bというファイルの内容が、Aファイルと変数名は変わらずで、
変数A=1、変数B=1、変数C=1、とします。
ここでAファイルをクローズ(他タスクが参照するかもしれないので)せずに、
AファイルをBファイルの内容にしたいということなのです。
こんなことは、やはりできないのでしょうか?
もちろん、Aファイルがマッピングされているので、直接Aを変更すれば良いのですが、
ファイル内容が膨大なため、なんとか再マッピング(?)できればと思ったのです。

OSはWindows2000で、VC6.0になります。

わかりにくい文章で申し訳ございませんが、よろしくお願いします。

A 回答 (2件)

>直接Aを変更すれば良いのですが、ファイル内容が膨大なため



膨大というのはどの程度ですか?
数MBくらいなら、Bファイルを読み込んでおいて、memcpy等でコピーするだけですよね。

この回答への補足

回答ありがとうございます。
ファイルのサイズは、約14MBです。膨大というのは大げさでした。すみません。
ファイルを読み込んで変更する以外は無理なのでしょうか?

補足日時:2005/10/11 09:20
    • good
    • 0

#1です。



>ファイルを読み込んで変更する以外は無理なのでしょうか?

最初の読み込みはBファイルを使い、その後はAファイルを使うようなマッピングが出来なければならないですが、そういう事は出来ません。
VirtualAlloc、AllocateUserPhysicalPages等、SEHを使用して自前で作れないかとも思いましたが、MSDNを読む限りでは、同一ページをプロセス間で共用できそうな気がしませんし、それにSEHを使うなんてマニアックすぎですよね。

MapViewOfFileにFILE_MAP_COPYを指定してAファイルが変更されないようにしても、Win2000だと共有メモリにはならないので、この方法も駄目です。

共有メモリが初期化される事がある以上、なんらかの排他制御と各タスクが再起動するような機能が必要だと想像できます。
再起動には時間がかかる。と思うしか無いと思います。
    • good
    • 0
この回答へのお礼

遅れまして申し訳ございません。
2度に渡り解答して頂きありがとうございました。
結局、inthefloiさんの言う通りファイル読み込みmemcpyすることにしました。

お礼日時:2005/10/16 02:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!