2012-04-28 24 views
1

私は2つのC++アプリケーションを「呼び出し元」と呼ばれる最初の呼び出しと呼び、2番目の呼び出しは「プロセッサ」としたいと思います。2つのアプリケーション間でデータの送受信を行います

呼び出し元アプリケーションがプロセッサに値を送信します。そのプロセッサがその値で何らかの処理を行った後、それを呼び出し元に返します。

私はそれを行う最善の方法を知りたいと思います。

これまでのところ、呼び出し側アプリケーションからプロセッサアプリケーションに値を送信する方法はわかっていましたが、値を返す方法が見つかりませんでした。 putenvを()とのgetenv()

発信者の例を用いて本方法の一

#include <iostream> 
#include <stdlib.h> 

using namespace std; 

int main(int argc, char **argv, char** envp){ 
    char myvar[]="MYVAR= say something"; 
    putenv(myvar); 
    cout<<getenv("MYVAR")<<endl; 
    system("./processor"); 
    cout<<getenv("MYVAR")<<endl; 
} 

プロセッサの例が存在する場合には、呼び出し元に、プロセッサからの値を返すように修正してする方法

#include <iostream> 
#include <stdlib.h> 

using namespace std; 

int main(int argc, char **argv, char** envp){ 
    char myvar[]="MYVAR= say something else"; 
    putenv(myvar); 
    cout<<getenv("MYVAR")<<endl; 
} 
それはもっと良い方法です。私はUbunut OSを使用しています。

+2

1ワード:ソケット。 – chris

+1

シェルプロンプトで 'man ipc'と入力してください。 –

+0

@Chris同じマシンで2つのアプリケーションを使用しています。ソケットを使用するとパフォーマンスが低下します。私はアプリケーション間でローカルコールや共有メモリが必要です。 – user8580

答えて

2

プロセス間で通信する方法はたくさんありますが、多くの要因によって最適です。環境を使用することは基本的に片方向通信にのみ適しており、双方向通信には適していません。利用可能な方法は次のとおりです。

  • 環境変数(片道)
  • コマンドライン引数(片道)
  • パイプ
  • ファイル
  • ソケット
  • FIFOを
  • 共有メモリ
  • メッセージキュー
  • の信号
  • セマフォは

いくつかは、共通の祖先で接続されたプロセスに限定されています。他の人は無関係なプロセスの間で動作することができ、時には同じマシン上で動作しないこともあります。いくつかのメカニズムは、ほとんどデータ(信号など)を伝達することができません。他の人は大量のデータを通信できます。同期を必要としないものもあれば、他は広範な同期が必要です。

どちらが最適ですか?推測するのに十分な情報がありません。ただし、パイプ、ファイル、ソケット間の最適な選択が最も可能性があります。

+0

私は共有メモリであるので、何もかもありがとうございました – user8580

+0

OK。どのプラットフォームで作業していますか? Unix(Linux)またはWindows? POSIXでは、3つの共有メモリシステムが選択できます。 Windows上の話が何であるか分かりません。 [System V IPC shared memory](http://pubs.opengroup.org/onlinepubs/9699919799/functions/shmget.html#)、[POSIX共有メモリ](http://pubs.opengroup.org/onlinepubs/)があります。 9699919799/functions/shm_open.html)、および共有メモリ用の[メモリマップファイル](http://pubs.opengroup.org/onlinepubs/9699919799/functions/mmap.html)を参照してください。各システムに必要な他の機能もあります。 –

+0

私はLinuxを使用しています。そしてこの3つのうちのどちらが良いか – user8580

関連する問題