コンピュータシミュレーションなんかをガリガリやってると、
「プログラムの実行中にリアルタイムでグラフを描かせたい」なんて思うことはありませんか? もちろん、X を使うプログラムを自分で書けばこの希望を叶えることができるわけですが、「そんなタイソウなもんはいらん」「面倒くさい」というあなたには、
「プログラムからGNUPLOTを呼び出してグラフを描かせる」という方法もあります。ここではC言語でこのような操作を実現する方法を説明します。
えらそうに書いてますが、なんのことはない、popen(3)を使うだけです。そう、それだけのことです。これでわかった人は、これ以上読み続けても時間の無駄です。自分でさっさと作ってみて下さい。(^^;
さて、popen(3)のマニュアルを見てみましょう。例えば FreeBSD 2.2.8-RELEASE のマニュアルはこうなっています。
% 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()
:
このpopenを使えば、CのプログラムからGNUPLOTを起動し、そのプロセスとデータのやりとりをできるわけです。
例えばこんなプログラム:
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 }
10行目でGNUPLOTのプロセスをオープンし、15行目でそいつに``plot sin(x)\n''を送ってます。これで、GNUPLOTのウインドウが現れて sin(x) のグラフを描いてくれるはずです。この仕組みが分かってしまえば、あとは応用していろんなことができますね。
つづく…(^^;