C ++:分岐したプロセスを介してポインターを共有することは可能ですか?

StackOverflow https://stackoverflow.com/questions/650770

  •  19-08-2019
  •  | 
  •  

質問

私はフォークしたいくつかのプロセスによってカウントアップされ、マザープロセスによって使用/読み取りされるカウント変数を持っています。

マザープロセスのmain()関数でポインターを作成し、フォークされた子でそのポインターをカウントアップしようとしました。それは機能しません!住所はすべてのプロセスで同じであるにもかかわらず、すべての子供は独自のコピーを持っているようです。

それを行う最良の方法は何ですか?

役に立ちましたか?

解決

各子は、親プロセスのメモリの独自のコピーを取得します(少なくとも何かを変更しようとするとすぐに)。プロセス間で共有する必要がある場合は、共有メモリまたは同様のIPCメカニズムを調べる必要があります。

ところで、なぜこれをコミュニティWikiにしているのですか?そうすることで応答を制限している可能性があります。

他のヒント

2つのプロセスは同じメモリを共有できません。フォークされた子プロセスは、フォーク後に同じ基になるメモリを共有するのは事実ですが、これに書き込もうとすると、オペレーティングシステムは別の場所に新しい書き込み可能なスペースを割り当てます。

使用する IPC の別の形式を調べます。

私の経験では、少なくとも2つのプロセス間で情報を共有したい場合、メモリへのvoid *ポインターだけを共有することはほとんどありません。ご覧になることをお勧めします

ブーストインタープロセス

これは、プロセス間で構造化データ(<!> quot; classes <!> quot;および<!> quot; structs <!> quot;を読む)を共有する方法を提供します。

いいえ、IPCまたはスレッドを使用します。ファイル記述子のみが共有されます(シークポインターは共有されません)。

共有メモリをチェックアウトすることもできます。

ポインタは常に同じプロセスにあります。 プロセスのベースアドレスに対して、プロセスに対してプライベートです。オペレーティングシステムでは、さまざまな種類のIPCメカニズムを使用できます。 Windowsメッセージング、共有メモリ、ソケット、パイプなどを選択できます。要件とデータのサイズに応じて選択してください。別のメカニズムは、利用可能な仮想メモリAPIを使用してターゲットプロセスにデータを書き込み、対応するポインターでプロセスに通知することです。

単純なオプションの1つですが、共有カウントに適したIPCの制限された形式は、「共有データセグメント」です。 Windowsでは、これは#pragma data_segディレクティブを使用して実装されます。

例については、記事をご覧ください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top