1

最初のアプリケーションは「caller」と呼ばれ、2 つ目のアプリケーションは「processor」と呼ばれます。

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

そのための最善の方法を知りたいです。

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

呼び出し元の例

#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 を使用しています。

4

1 に答える 1

2

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

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

一部は、共通の祖先によって接続されたプロセスに制限されています。他の人は、同じマシン上でさえない場合もある、無関係のプロセス間で作業できます。一部のメカニズムは、ごくわずかなデータ(信号など)を通信できます。他の人は大量のデータを通信できます。同期を必要としないものもあります。その他には、広範な同期が必要です。

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

于 2012-04-28T22:54:43.380 に答える