启动一个C++;应用程序,并与之通信 我有一个C++(技术上的Matlab MEX)程序,我计划在我的系统上启动一个独立的纯C++从属程序。主调用程序可能如下所示: void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]){ system ("path/to/slave/program"); }

启动一个C++;应用程序,并与之通信 我有一个C++(技术上的Matlab MEX)程序,我计划在我的系统上启动一个独立的纯C++从属程序。主调用程序可能如下所示: void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]){ system ("path/to/slave/program"); },c++,c,matlab,system-calls,mex,C++,C,Matlab,System Calls,Mex,一旦从机启动,我希望有第二个mex程序,它将与从机程序通信并向其发送数据。发送的数据将采用大ISH C++数组的形式。 我想我需要从程序的某种句柄(可能是它的pid?),一种发送消息的方法,也可能是从程序监听传入消息的一种方式 我没有独立的C++程序来进行交流的经验,所以在这个领域中的任何提示都是值得赞赏的。此外,如果有任何特定的MATLAB mex特定的警告,我将有兴趣了解这些 编辑:我应该提到我正在Ubuntu上构建这个,但最终我希望它能在所有平台上运行。平台特定的建议非常受欢迎,但多平台

一旦从机启动,我希望有第二个mex程序,它将与从机程序通信并向其发送数据。发送的数据将采用大ISH C++数组的形式。 我想我需要从程序的某种句柄(可能是它的pid?),一种发送消息的方法,也可能是从程序监听传入消息的一种方式

我没有独立的C++程序来进行交流的经验,所以在这个领域中的任何提示都是值得赞赏的。此外,如果有任何特定的MATLAB mex特定的警告,我将有兴趣了解这些



编辑:我应该提到我正在Ubuntu上构建这个,但最终我希望它能在所有平台上运行。平台特定的建议非常受欢迎,但多平台的想法才是我真正想要的

我强烈建议所有Windows通信使用COM技术。


顺便说一句,如果你想直接使用Matlab代码,你可以使用Matlab Builder NE编译COM组件,因此你根本不需要编写mex。

我强烈推荐COM技术用于所有Windows通信。

顺便说一下,如果您想直接使用Matlab代码,可以使用Matlab Builder NE编译COM组件,因此根本不需要编写mex。

您正在寻找一种机制

这是一个跨平台的解决方案

Boost.Interprocess已在以下编译器/平台上进行了测试:

你正在寻找一种机械装置

这是一个跨平台的解决方案

Boost.Interprocess已在以下编译器/平台上进行了测试:


这是特定于平台的,但在POSIX平台上,您可以使用它来启动命令,为您提供一个管道,用于将数据写入其标准输入(以及从其标准输出读取数据)


更方便,但更简单的是,库有各种进程间通信的方式。

这是特定于平台的,但在POSIX平台上,您可以使用它来启动命令,为您提供一个管道,用于将数据写入其标准输入(以及从其标准输出读取)


更便于携带,但不那么简单,该库有各种进程间通信的方式。

如果您正在寻找跨平台的通信解决方案。文档中还提供了大量关于这些东西如何工作的信息。

如果您正在寻找用于通信检查的跨平台解决方案。文档中也有很多关于这些东西是如何工作的信息。

如果你有时间,正如前面的答案所建议的,你一定应该选择IPC

然而,也有许多“快速而肮脏”的解决方案,您不需要花时间阅读任何文档

我可以向您推荐的一个方法是使用文件。当您想要通信时,进程1会写下一个带有参数的文件。然后是另一个文件,说明参数已准备就绪。进程2,有一个循环等待第二个文件。如果找到它,它将删除它,然后读取参数

我知道这是肮脏的,但这是非常快的程序,并没有必要阅读任何文档

如果你有大的参数,你会浪费很多时间把它们写在硬盘上。我建议你做一些更脏的事情:安装RAM,并在上面写上:

mkdir -p /tmp/ram
sudo mount -t tmpfs -o size=512M tmpfs /tmp/ram/

如果你有时间,正如前面的答案所建议的,你一定要参加IPC

然而,也有许多“快速而肮脏”的解决方案,您不需要花时间阅读任何文档

我可以向您推荐的一个方法是使用文件。当您想要通信时,进程1会写下一个带有参数的文件。然后是另一个文件,说明参数已准备就绪。进程2,有一个循环等待第二个文件。如果找到它,它将删除它,然后读取参数

我知道这是肮脏的,但这是非常快的程序,并没有必要阅读任何文档

如果你有大的参数,你会浪费很多时间把它们写在硬盘上。我建议你做一些更脏的事情:安装RAM,并在上面写上:

mkdir -p /tmp/ram
sudo mount -t tmpfs -o size=512M tmpfs /tmp/ram/

谢谢,这看起来值得一看。我应该提到我是在Ubuntu上构建的,但它最终也将在Windows平台上使用(也许这将是最困难的挑战!)谢谢,这看起来是值得研究的。我应该提到我是在Ubuntu上构建的,但它最终也将在Windows平台上使用(也许这将是最困难的挑战!)“大ish”的字节数有多大,以及您将多久来回发送这么多数据?不,数据将只发送到从程序,而不是返回。数据的大小可能在10Mb左右,可能更大。按字节计算,“大ish”有多大,以及您来回发送这一数量的数据的频率有多高?不,数据将只发送到从程序,而不是返回。数据可能在10Mb左右,可能更大。非常感谢。所以,如果我要用它发送~10Mb的数据,我应该把它写入共享内存吗?比如这个例子?是的,我会使用共享内存。您还需要使用类似于的方法向您的子进程发出信号,表明共享内存中的数据已准备好使用。非常感谢。所以,如果我要用它发送~10Mb的数据,我应该把它写入共享内存吗?比如这个例子?是的,我会使用共享内存。您还需要使用类似于的方法向您的子进程发出信号,表明共享内存中的数据已准备就绪