8

以下で作業したいシナリオをスケッチします。

主なアプリケーションが 1 つあります。そのアプリケーションは、ユーザーの操作に基づいて、安全な環境/シェル内に他のアプリケーションをロードできます。これは、これらの子アプリケーションが OS とやり取りしたり、相互にやり取りしたりできないことを意味します。

親プログラムは、これらの子プログラムの関数をいつでも呼び出すことができます。子プログラムは、これらの親プログラムの関数をいつでも呼び出すことができます。

これをC++で実装する方法を知っている人はいますか? できれば、親と子の両方が C++ で記述されている必要があります。

親アプリケーション内に子アプリケーションをロードするパフォーマンスは重要ではありません。重要なのは、お互いの関数を呼び出すときの子と親の間の通信のパフォーマンスだけです。

4

4 に答える 4

3

独自のコンパイラを作成する必要があります。

考えてみてください: 通常の OS はあなたが望むものをサポートしていません。両方の実行可能ファイルを単一のプロセス内で実行する必要がありますが、そのプロセスは、OS がまったく理解できないプロセス内の奇妙な点に応じて、OS 呼び出しを行う場合と行わない場合があります。

これは、問題のある命令を作成しないため、カスタム コンパイラの問題ではなくなりました。これは Java や .Net に似ており、これらも制御外の OS 呼び出しを防ぎます。

于 2013-07-09T21:15:52.987 に答える
2

ポータブル ソリューション: Google ネイティブ クライアント

考えられる Linux ソリューションの 1 つ:

  1. 「帽子」を使用して AppArmor プロファイルを作成します (「帽子」は、アプリケーションが libapparmor を使用してプログラムで切り替えることができるサンドボックス構成です)。
  2. メインアプリケーションに「パイプ」を作成させ、
  3. メインアプリケーション「フォーク」を持ち、
  4. 子アプリに対応した「帽子」に着替え、
  5. 子アプリケーションを「実行」し、
  6. メイン アプリケーションと子アプリケーションは、前に作成した「パイプ」を介して通信します。
于 2013-07-09T20:09:47.337 に答える
-1

上記の回答のOSの制限についてはよく知りません。しかし、この問題を解決する簡単な方法を見つけました。技術的な問題がなく、お役に立てば幸いです。Linux OS を使用しました。別の C++ プログラム A 内で C++ プログラム B を呼び出したいとします。プログラム B を実行するためのシステム コールを含む perl スクリプト (PerlScript.pl など) を作成しました。次に、A で system("perl PerlScript.pl") は、perl に B を実行するように依頼します。

于 2019-08-27T18:35:31.007 に答える