8

我将勾勒出我想在下面开始工作的场景。

我有一个主要应用程序。该应用程序基于用户交互,可以在安全环境/外壳中加载其他应用程序。这意味着这些子应用程序不能再与操作系统交互,也不能相互交互。

父程序可以随时调用这些子程序的函数。子程序可以随时调用这些父程序的函数。

有谁知道如何在 C++ 中实现这个?最好父母和孩子都应该用 C++ 编写。

在父应用程序中加载子应用程序的性能并不重要。唯一重要的是孩子和父母在相互调用函数时的通信性能。

4

4 回答 4

3

您将不得不编写自己的编译器。

考虑:没有普通的操作系统支持你想要的。您希望两个可执行文件都在单个进程中运行,但该进程可能会或可能不会调用操作系统,具体取决于操作系统根本不理解的进程内部的一些怪异。

这不再是您的自定义编译器的问题,因为它根本不会创建有问题的指令。它类似于 Java 和 .Net,它们也可以防止此类操作系统调用超出其控制范围。

于 2013-07-09T21:15:52.987 回答
2

便携式解决方案:Google Native Client

一种可能的 Linux 解决方案:

  1. 使用“帽子”制作 AppArmor 配置文件(“帽子”是一种沙盒配置,应用程序可以使用 libapparmor 以编程方式切换到该配置),
  2. 让主应用程序创建一个“管道”,
  3. 拥有主应用程序“fork”,
  4. 变成对应子应用的“帽子”,
  5. “执行”子应用程序,
  6. 主应用程序和子应用程序通过之前创建的“管道”进行通信。
于 2013-07-09T20:09:47.337 回答
0

如果你想要一种(半)跨平台的方式来做到这一点,你可以使用 RPC 来调用另一个进程中的函数。它适用于任何支持分布式计算环境的东西。它已经存在了一段时间,msdn 文档指出部分窗口使用它进行进程间通信,因此它可能足够快。这是一个关于 msdn 的教程,应该能让你启动并运行http://msdn.microsoft.com/en-us/library/windows/desktop/aa379010.aspx 不好的是我找不到教程关于在 linux 上使用它。

如果您不想使用 RPC 或发现很难找到关于该主题的好的文档,您可以使用 unix 系统中的标准 IPC(进程间通信)机制来通知您的进程应该调用某个函数。我推荐一个消息队列,因为它非常快速和轻量级。你可以在这里找到一个教程:http ://www.cs.cf.ac.uk/Dave/C/node25.html

于 2013-07-09T20:43:33.200 回答
-1

我不熟悉上述答案中的操作系统限制。但是,我找到了解决此问题的简单方法。我希望它有所帮助并且没有技术问题。我使用的是 Linux 操作系统。假设我想在另一个 C++ 程序 A 中调用 C++ 程序 B。我编写了一个 perl 脚本(例如 PerlScript.pl),其中包含运行程序 B 的系统调用。然后在 A 中,我做了一个系统调用,如 system("perl PerlScript.pl") 要求 perl 为我运行 B。

于 2019-08-27T18:35:31.007 回答