1

fork + exec を使用して生成されたプロセスにポインターを渡したい (mmap を使用してデータを含むファイルをメモリに配置している) のですが、exec() で生成されたプロセスにポインターを渡す方法に行き詰まっていますか?

更新1:

ご意見をお寄せいただきありがとうございます。共有メモリを使用して、mmap と MAP_INHERIT フラグを使用して作成しています。

mmap() 関数で作成されたマップされた各ファイルと共有メモリー領域は、MAP_INHERIT オプションでマップされた領域を除き、いずれかの exec 関数の呼び出しが成功するとマップ解除されます。MAP_INHERIT オプションでマップされた領域は、新しいプロセス イメージにマップされたままになります。

ソース: http://www.uwm.edu/cgi-bin/IMT/wwwman?topic=exec(2)&msection=

更新 2:

これは宿題ですが、ポインターについて考えるのをやめて、IPC 自体について考えなければならないと思います。子プロセスで同じファイルを mmap しようとすると思います。

短いコードの例は大歓迎です。

よろしくお願いします。

4

6 に答える 6

9

共有メモリを使用する場合、ポインタを渡すことはできません。ポインターには、プロセスごとに異なる仮想アドレスが含まれます。共有メモリ領域の開始に基づいて、オフセット値を交換する必要があります。

共有メモリを使用しない場合、いかなる種類のポインタも交換できません。他のプロセスは、プロセスのメモリにアクセスできません。

于 2009-03-09T01:22:53.960 に答える
1

生成されたプロセスは、おそらく親プロセスに戻るパイプを開き、共有メモリ セグメントをマップするために必要なデータを要求する必要があります。

または、boost::interprocess を使用して共有メモリ セグメントを作成し、実際にアドレスを渡すことができます (マッピングを行うことができます)。ただし、そのドキュメントを自分で読んでいます: http://www.boost.org/doc/libs/1_38_0/doc/html/interprocess.html

于 2009-03-09T01:32:46.340 に答える
1

これはうまくいきません。新しいプロセスはmmap、ファイル自体も必要です。

于 2009-03-09T01:22:07.130 に答える
0

これは大きな領域であり、多くの選択肢があります。

これらの解決策を見つける鍵は、 Linux プロセッサ間通信Linux IPCなどを検索することです。

IPC の概要は、Advance Linux Programming (ISBN: 0-7357-1043-0) などの書籍にも記載されています。

于 2009-03-18T07:02:12.763 に答える
0

コマンドライン引数または環境変数でテキストとして渡すだけです。

于 2009-03-09T01:21:14.493 に答える