Passing information between two seperate programs

99封情书 提交于 2019-12-08 21:44:47

In response to your comment to Roopesh Majeti's answer, here's a very simple example using environment variables:

First program:

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

Second program:

// 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;
    }
}

Note:

  • there is no standard way of setting an environment variable
  • you will need to construct the name=value string from the variable contents

Depending on the platform there are a number of options available. What you are trying to do is typically called inter-process communication (IPC).

Some options include:

  • Sockets
  • Pipes
  • Queues
  • Shared Memory

What is easiest is probably dependent on the platform youa are using.

As always, there is a Boost library for that (God, I like Boost).

Viet

Nic has covered all the 4 that I wanted to mention (on the same machine):

  • Sockets
  • Pipes
  • Queues
  • Shared Memory

If writing system calls is troublesome for you, you may want to use the following libraries:

  1. Boost http://www.boost.org/
  2. Poco http://pocoproject.org/blog/
  3. Nokia Qt http://qt.nokia.com/

Something you can read from Qt portable IPC: only QSharedMemory?

If effeciency is not prime concern then use normal file i/o.

else go for IPC to do so.

As far as Windows is concern you have following options :

Clipboard , COM , Data Copy , DDE , File Mapping , Mailslots , Pipes , RPC , Windows Sockets

For Linux , use can use Name Pipes(efficient) or sockets.

If you're on Windows, you can use Microsoft Message Queueing. This is an example of queue mentioned previously.

If the data to be passed is just a variable, then one of the option is to set it as Environment Variable [ Var1 ] by program #1 and access it, in Program #2 [ if both are running on same env/machine ]. Guess this will be the easiest one, instead of making it complex, by using IPC/socket etc.

I think most of the answers have address the common IPC mechanisms. I'd just like to add that I would probably go for sockets because it's fairly most standard across several platforms. I decided to go for that when I needed to implement IPC that worked both on Symbian Series 60 and Windows Mobile.

The paradigm is straightforward and apart from a few platform glitches, the model worked the same for both platforms. I would also suggest using Protocol Buffers to format the data you send through. Google uses this a lot in its infrastructure. http://code.google.com/p/protobuf/

  • DBUS
  • QtDbus
  • DBus-mm
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!