共有メモリ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ビギナー

共有メモリ

#1

投稿記事 by ビギナー » 7年前

現在共有メモリを取り扱うプログラムを組んでいます。
プロセスAが共有メモリにデータを書き込みプロセスBがそのデータを使うという
ようなプログラムです。

共有メモリにはCreateFileMapping を使用しています。
仮にプロセスAが落ちてしまった場合、書き込んだいたメモリが消去されるという
考えに至ったのですが(実際にそんな感じになっていました)

プロセスAが落ちてもデータは残っているようにしたいのですが
何かよい方法はありませんでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: 共有メモリ

#2

投稿記事 by softya(ソフト屋) » 7年前

無くならないはずなんですが、消えますでしょうか?
検証コードを見せて頂けると、こちらでも検証出来ますのでお願いします。

CreateFileMapping の仕様では、全部のハンドルが閉じるまで保持されると書かれています。
「CreateFileMapping 関数」
http://msdn.microsoft.com/ja-jp/library/cc430039.aspx
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: 共有メモリ

#3

投稿記事 by YuO » 7年前

読み込み用のハンドルを開くより前に落ちた場合は,まあデータは失われますが……。
これを避けるならば,ファイル等の不揮発性ストレージに書き出すしかないでしょう。
# 書き込み中のデータにどれだけの意味があるのかわかりませんが。

結局は,どのタイミングでプロセスが落ちたのかによって,状況が変わります。
どういうタイミングで落ちたのでしょうか (読み側と書く側のファイルマッピングオブジェクトのハンドルを得るタイミングと,プロセスが落ちるタイミング)。

あと,ファイルマッピングによる共有メモリがデータを渡すための手段であるならば,WM_COPYDATAやパイプなどの方法で直接プロセス間通信をしてみるのもよいかもしれません。

閉鎖

“C言語何でも質問掲示板” へ戻る