在两个单独的程序之间传递信息

时间:2009-12-17 10:08:42

标签: c++ linux ipc

我想在我的程序中传递输入变量的值,让#1说到另一个程序#2,我希望#2打印它到屏幕的数据,两者都需要用c ++编写。这将在Linux上。

9 个答案:

答案 0 :(得分:7)

根据平台的不同,有许多选项可供选择。您要做的通常称为进程间通信(IPC)。

一些选项包括:

  • 套接字
  • 队列
  • 共享内存

最简单的可能取决于您正在使用的平台。

答案 1 :(得分:6)

与往常一样,有一个Boost library(上帝,我喜欢Boost)。

答案 2 :(得分:4)

Nic已经涵盖了我想要提及的所有4个(在同一台机器上):

  • 套接字
  • 队列
  • 共享内存

如果编写系统调用对您来说很麻烦,您可能需要使用以下库:

  1. 提升http://www.boost.org/
  2. Poco http://pocoproject.org/blog/
  3. 诺基亚Qt http://qt.nokia.com/
  4. 您可以从Qt portable IPC: only QSharedMemory?

    中读取的内容

答案 3 :(得分:2)

如果效率不是主要问题,请使用普通文件i / o

否则请去IPC。

Windows 而言,您有以下选择:

剪贴板, COM, 数据复制, DDE, 文件映射, Mailslots, 管道, RPC, Windows套接字

对于 Linux ,请使用名称管道(高效)或套接字

答案 4 :(得分:1)

如果您使用的是Windows,则可以使用Microsoft消息队列。这是前面提到的队列的一个例子。

答案 5 :(得分:1)

如果要传递的数据只是一个变量,那么其中一个选项是通过程序#1将其设置为环境变量[Var1]并在程序#2中访问它[如果它们都在相同的环境中运行/机器]。通过使用IPC / socket等,猜测这将是最简单的,而不是使其变得复杂。

答案 6 :(得分:1)

我认为大多数答案都涉及常见的IPC机制。我想补充一点,我可能会选择套接字,因为它在几个平台上相当标准。当我需要实现适用于Symbian Series 60和Windows Mobile的IPC时,我决定采用这种方式。

范例很简单,除了一些平台故障外,该模型对两个平台的工作方式都相同。我还建议使用Protocol Buffers格式化您发送的数据。谷歌在其基础设施中使用了很多。 http://code.google.com/p/protobuf/

答案 7 :(得分:1)

  • DBUS
  • QtDbus
  • 的DBus毫米

答案 8 :(得分:0)

回应你对Roopesh Majeti的回答的评论,这是一个使用环境变量的简单例子:

第一个程序:

// p1.cpp - set the variable
#include <cstdlib>
using namespace std;;    
int main() {
    _putenv( "MYVAR=foobar" );
    system( "p2.exe" );
}

第二个程序:

// p2.cpp - read the variable
#include <cstdlib>
#include <iostream>
using namespace std;;

int main() {
    char * p = getenv( "MYVAR" );
    if ( p == 0 ) {
        cout << "Not set" << endl;
    }
    else {
        cout << "Value: " << p << endl;
    }
}

注意:

  • 没有设置环境变量的标准方法
  • 您需要从变量内容
  • 构造name = value字符串