如何在另一个C++程序中运行C++程序
How to run a C++ program inside another C++ program?
我将在下面勾勒出我想要处理的场景。
我有一个主要的应用程序。该应用程序基于用户交互,可以在安全的环境/外壳中加载其他应用程序。这意味着这些子应用程序不能再与操作系统交互,也不能相互交互。
父程序可以在任何时候调用这些子程序的函数。子程序可以在任何时候调用这些父程序的函数。
有人知道如何在C++中实现这一点吗?最好父母和孩子都应该用C++编写。
在父应用程序中加载子应用程序的性能并不重要。唯一重要的是当调用彼此的函数时,子级和父级之间的通信性能。
您必须编写自己的编译器。
考虑一下:没有一个普通的操作系统支持你想要的。您希望两个可执行文件都在一个进程中运行,但该进程可能会也可能不会进行操作系统调用,这取决于进程中的一些奇怪之处,而操作系统根本不理解这些奇怪之处。
这不再是自定义编译器的问题,因为它不会创建有问题的指令。它类似于Java和.Net,它们也防止此类操作系统调用超出其控制范围。
一个可移植的解决方案:Google Native Client
一种可能的Linux解决方案:
- 使用"hats"制作AppArmor配置文件("hat"是一种沙盒配置,应用程序可以通过libapparmor以编程方式切换到该配置)
- 让主应用程序创建一个"管道"
- 拥有主应用程序"fork"
- 更改为与子应用程序相对应的"帽子"
- "执行"子应用程序
- 主应用程序和子应用程序通过前面创建的"管道"进行通信
如果您想要一种(半)跨平台的方式来实现这一点,您可以使用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。
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 程序崩溃并显示"std::out_of_range"错误
- 在C应用程序中运行C++(带有STL)函数
- 使用mongocxx驱动程序时包含头文件问题
- 如何在c++程序中找到函数的地址