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

How to run a C++ program inside another C++ program?

本文关键字:C++ 程序 运行 另一个      更新时间:2023-10-16

我将在下面勾勒出我想要处理的场景。

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

父程序可以在任何时候调用这些子程序的函数。子程序可以在任何时候调用这些父程序的函数。

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

在父应用程序中加载子应用程序的性能并不重要。唯一重要的是当调用彼此的函数时,子级和父级之间的通信性能。

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

考虑一下:没有一个普通的操作系统支持你想要的。您希望两个可执行文件都在一个进程中运行,但该进程可能会也可能不会进行操作系统调用,这取决于进程中的一些奇怪之处,而操作系统根本不理解这些奇怪之处。

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

一个可移植的解决方案:Google Native Client

一种可能的Linux解决方案:

  1. 使用"hats"制作AppArmor配置文件("hat"是一种沙盒配置,应用程序可以通过libapparmor以编程方式切换到该配置)
  2. 让主应用程序创建一个"管道"
  3. 拥有主应用程序"fork"
  4. 更改为与子应用程序相对应的"帽子"
  5. "执行"子应用程序
  6. 主应用程序和子应用程序通过前面创建的"管道"进行通信

如果您想要一种(半)跨平台的方式来实现这一点,您可以使用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

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