Passing information between two seperate programs

只谈情不闲聊 提交于 2019-12-08 07:21:23

问题


I want to pass a value of an input variable in my program lets say#1 to another program #2 and i want #2 to print the data it got to screen, both are needed to be written in c++. The this will be on Linux.


回答1:


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



回答2:


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.




回答3:


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




回答4:


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?




回答5:


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.




回答6:


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




回答7:


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.




回答8:


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/




回答9:


  • DBUS
  • QtDbus
  • DBus-mm


来源:https://stackoverflow.com/questions/1920687/passing-information-between-two-seperate-programs

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