如何在另一个C ++程序中运行C ++程序?

时间:2013-07-09 19:43:53

标签: c++ linux shell

我将描绘我想在下面工作的场景。

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

父程序可以随时调用这些子程序的功能。 子程序可以随时调用这些父程序的功能。

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

在父应用程序中加载子应用程序的性能无关紧要。唯一重要的是在调用彼此的功能时,孩子和父母之间的沟通表现。

4 个答案:

答案 0 :(得分:3)

您必须编写自己的编译器。

考虑:没有正常的操作系统支持你想要的东西。您希望两个可执行文件在单个进程内运行,但该进程可能会也可能不会进行OS调用,这取决于操作系统内部根本不了解的一些奇怪现象。

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

答案 1 :(得分:2)

便携式解决方案:Google Native Client

一种可能的Linux解决方案:

  1. 使用“hats”创建AppArmor配置文件(“帽子”是应用程序可以使用libapparmor以编程方式切换的沙盒配置),
  2. 让主应用程序创建一个“管道”,
  3. 主应用程序为“fork”,
  4. 更改为与子应用程序对应的“帽子”,
  5. “执行”子应用程序,
  6. 主应用程序和子应用程序通过之前创建的“管道”进行通信。

答案 2 :(得分:0)

如果您想要(半)跨平台方式来执行此操作,则可以使用RPC在另一个进程中调用函数。它将适用于任何支持分布式计算环境的东西。它已经存在了一段时间,并且msdn文档声明Windows的一部分用它进行进程间通信,所以它可能足够快。这是一个关于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

答案 3 :(得分:-1)

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