Index: [Article Count Order] [Thread]

Date:  Wed, 15 Nov 95 22:45:47 JST
From:  Masanobu KOGA/古賀雅伸  <koga>
Subject:  Process communication with PIPE
To:  MaTX@mei.titech.ac.jp (MaTX ML)
Posted:  Wed, 15 Nov 1995 22:45:44 +0900
X-Mail-Count: 00094

古賀@東工大です。

古賀> gplotはmgplotから呼び出されるperlのスクリプトであり,MaTXとgnuplot
古賀> の仲介をします。
古賀>
古賀>             mgplot   ------>  gplot  ------>  gnuplot
古賀>            (mmfile)       (perl script)
古賀> 
古賀> 上の図のようにデータが流れます。もし,データをプロットするために 
古賀> gnuplot を使われているなら,mgplot を便利だと感じられると思います。
古賀> 
古賀> ただし,perl が介在しているので,CPUの負担がちょっと大きいです。

perl を呼ばないで,直接 gnuplot を呼び出せるように,MaTXでUNIXのパイプ
(プロセス間通信の仕組み)を使えるようにしました。

ファイルと同様にプロセスをオープンし,データをプロセスに送ったり,
データをプロセスから受け取ったりできます。プロセスを popen() で
オープンしたあとは,プロセスディスクリプタによってプロセスを指定
します。これは,ファイルディスクリプタと同様に扱えるものです。
通信が不要になったプロセスは pclose() によって終了します。

【例1】 bc を呼び出して 3 + 4 の計算結果を得る。

  if ((pid = popen("bc")) < 0) {
      error("Can't open %s", "bc");
  }
  fprintf(pid, "3 + 4\n");
  {a} = fscanf(pid, "%d");
  print a;
  pclose(pid);

【例2】 gnuplotを呼び出して正弦関数をプロットする。

  if ((pid = popen("gnuplot -title sample")) < 0) {
      error("Can't open %s", "gnuplot");
  }
  fprintf(pid, "plot sin(x)\n");
  pause;
  fprintf(pid, "quit\n");
  pclose(pid);

--
古賀  雅伸
koga@mei.titech.ac.jp