コンピュータシミュレーションなんかをガリガリやってると、
「プログラムの実行中にリアルタイムでグラフを描かせたい」なんて思うことはありませんか? もちろん、X を使うプログラムを自分で書けばこの希望を叶えることができるわけですが、「そんなタイソウなもんはいらん」「面倒くさい」というあなたには、
「プログラムからGNUPLOTを呼び出してグラフを描かせる」という方法もあります。ここではC言語でこのような操作を実現する方法を説明します。
えらそうに書いてますが、なんのことはない、popen(3)を使うだけです。そう、それだけのことです。これでわかった人は、これ以上読み続けても時間の無駄です。自分でさっさと作ってみて下さい。(^^;
さて、popen(3)のマニュアルを見てみましょう。例えば FreeBSD 2.2.8-RELEASE のマニュアルはこうなっています。
このpopenを使えば、CのプログラムからGNUPLOTを起動し、そのプロセスとデータのやりとりをできるわけです。% man 3 popen POPEN(3) UNIX Programmer's Manual POPEN(3) NAME popen, pclose - process I/O SYNOPSIS #include <stdio.h> FILE * popen(const char *command, const char *type) int pclose(FILE *stream) DESCRIPTION The popen() function ``opens'' a process by creating a bidirectional pipe forking, and invoking the shell. Any streams opened by previous popen() :
例えばこんなプログラム:
10行目でGNUPLOTのプロセスをオープンし、15行目でそいつに``plot sin(x)\n''を送ってます。これで、GNUPLOTのウインドウが現れて sin(x) のグラフを描いてくれるはずです。この仕組みが分かってしまえば、あとは応用していろんなことができますね。1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define GNUPLOT_PATH "/usr/local/bin/gnuplot" 5 6 int main() 7 { 8 FILE *gp; 9 10 gp = popen(GNUPLOT_PATH, "w"); 11 if(gp == NULL){ 12 fprintf(stderr, "Oops, I can't find %s.", GNUPLOT_PATH); 13 exit(EXIT_FAILURE); 14 } 15 fprintf(gp, "plot sin(x)\n"); 16 fflush(gp); /* Don't forget to flush the buffer. */ 17 getchar(); 18 pclose(gp); 19 20 exit(EXIT_SUCCESS); 21 }
つづく…(^^;