1

C/C++ で異なる実行可能ファイル間で共有構造を定義する必要があります。どうやってやるの?私のstarter.cファイルで:

pid_t child = fork();
if (child > 0) {
  // Parent.
  ... // detach shared memory
  argv[0] = "./app1";
  execv(argv[0], argv);
}
else {
  // Child.
  argv[0] = "./app2";
  execv(argv[0], argv);
}
  • start.h -> 共有構造を定義
  • start.c -> オブジェクトとフォークを作成します (上記のコードのように)
  • app.c -> 共有構造を使用

アップデート:

  • start.h でクラスを定義し、 (MAP_SHARED を使用して) 共有メモリでfork()の前にクラスを作成し、 app1.cでそのメンバー (shared_class->s など) にアクセスすると、セグメンテーション違反が発生します。

  • 問題は、クラス/変数を exec 後にそのまま保持する方法です。

4

2 に答える 2

0

使用しているプラ​​ットフォームがわからない。

リナックスなら。mmapを使用できます。

まず、 shm_openを使用して共有メモリ マッピング ファイルを作成します。

次に、作成するすべての実行可能ファイルにマッピングします。

共有メモリとの間で構造体の書き込み/読み取りを行います。

すべてのプロセスが同じ共有メモリにアクセスできます。

mmap のチュートリアルが必要になる場合があります。

于 2013-01-28T01:47:36.360 に答える
0

共有構造がある場合は、それを別の .h(header) ファイルで宣言し、それを starter.c と app.c C ファイルの両方にヘッダーとして含めてみませんか。

それらを個別にコンパイルする必要がある場合は、共有メモリを使用できます。構造を共有メモリにロードすると、両方のプロセスが問題なく構造にアクセスできます。

于 2013-01-28T01:16:05.557 に答える