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になります。
わかりにくい文章で申し訳ございませんが、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
>直接Aを変更すれば良いのですが、ファイル内容が膨大なため
膨大というのはどの程度ですか?
数MBくらいなら、Bファイルを読み込んでおいて、memcpy等でコピーするだけですよね。
この回答への補足
回答ありがとうございます。
ファイルのサイズは、約14MBです。膨大というのは大げさでした。すみません。
ファイルを読み込んで変更する以外は無理なのでしょうか?
No.2
- 回答日時:
#1です。
>ファイルを読み込んで変更する以外は無理なのでしょうか?
最初の読み込みはBファイルを使い、その後はAファイルを使うようなマッピングが出来なければならないですが、そういう事は出来ません。
VirtualAlloc、AllocateUserPhysicalPages等、SEHを使用して自前で作れないかとも思いましたが、MSDNを読む限りでは、同一ページをプロセス間で共用できそうな気がしませんし、それにSEHを使うなんてマニアックすぎですよね。
MapViewOfFileにFILE_MAP_COPYを指定してAファイルが変更されないようにしても、Win2000だと共有メモリにはならないので、この方法も駄目です。
共有メモリが初期化される事がある以上、なんらかの排他制御と各タスクが再起動するような機能が必要だと想像できます。
再起動には時間がかかる。と思うしか無いと思います。
遅れまして申し訳ございません。
2度に渡り解答して頂きありがとうございました。
結局、inthefloiさんの言う通りファイル読み込みmemcpyすることにしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access VBA を利用して、フォルダ内のファイルの名称を変更したい 1 2023/08/03 08:27
- Visual Basic(VBA) Excelのマクロについて教えてください。 作業フォルダ内に2つのファイルがあります。 このファイル 2 2023/07/09 13:40
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Excel(エクセル) Excelの複数人での参照について 2 2022/06/01 13:38
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- PDF PDFに精通した方に質問。JPEGファイル群を一つのPDFファイルにするときの容量変化について 6 2023/07/23 19:06
- Excel(エクセル) エクセルのファイルにリンクを貼る方法 4 2023/06/30 11:09
- Windows 10 renameコマンドでファイル名からアンダースコアを消す方法 5 2023/04/24 13:33
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセス 壊れた? 「ファイ...
-
binファイルを解凍したいの...
-
参照するファイルをワイルドカ...
-
C言語---ファイルに出力したデ...
-
既に開いているエクセルを閉じ...
-
#include <Windows.h>というヘ...
-
Latexで図番号だけを「図1.1」...
-
exeファイルが作れない(windows10)
-
公文書のxmlファイルの開き方が...
-
.NETアプリを作ったときの .man...
-
ハイパーリンクされたJPGファイ...
-
リンクの張り付けかたを教えて...
-
jarファイル
-
Batファイルをバイナリ形式にす...
-
CSVから指定行だけを読み込み
-
Seasar2のdiconファイルの読み方
-
コマンドプロンプトで作成日時...
-
bibtexで参考文献作成できない
-
COBOL
-
エクセルファイルが複数同時に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセス 壊れた? 「ファイ...
-
#include <Windows.h>というヘ...
-
Latexで図番号だけを「図1.1」...
-
binファイルを解凍したいの...
-
.NETアプリを作ったときの .man...
-
ファイル構造が破損しているフ...
-
2つのファイルのバイナリをコン...
-
CSSを1ページに1枚作るのって変...
-
Word VBA MSGBOX 内で降順表示
-
公文書のxmlファイルの開き方が...
-
jarファイル
-
バッチ処理で追記コピーしたい
-
自分で作成した重要ファイルを...
-
ファイルは何で構成されている...
-
exeファイルをデータ転送サービ...
-
リンクの張り付けかたを教えて...
-
exeファイルの中身を見る方法は...
-
参照するファイルをワイルドカ...
-
CRCが一致する確率
-
C言語---ファイルに出力したデ...
おすすめ情報