月曜日, 12月 08, 2008

pipeを通して他のプログラムからgnuplot for Windowsを操作する (1)

良く考えるとMinGWで書いたプログラムをgnuplot for Windowsでやったことはないのですよ。

さらに考えると、Fortran90以降を使って外部プログラムとpipeで通信する…のもやったことがないし、Cで書いたプログラムをFortran90以降から呼び出す…とかもやったことがないのです。うー、大分面倒になってきました orz

少々探しますと、gfortrang95からpipe通信するライブラリやgnuplotを操作するライブラリもあるようですが、ここはぐうたらせずに自前でどうにかすることを考えました。たぶんそんなに手間はかかんないと思う…だといいなぁ。

Fortranにはさすがにpipe操作手続きはない…ので自前で用意するのです。当然Cで書くのですが、FortranからCの関数の呼び方が判りません…ここに書かれている程度の事は当然今までも使ってきていたのですが、考えるとFortran90以降の仕様に関する事は全然判りません。でここを参考にさせて頂きますと、どうも少なくともgfortrang95ではftoc(f2c?)の規則に習っているそうで…いやftocの規則が判りませんが。仕方がありませんのでひたすらこちらを参考にコードを書くことにします。POSIX pipeへの出力をする為のpopen, pclose関数を使って、gnuplotを呼び出してコマンドを送ります。

多分、MinGWでPOSIX pipeを使ったコードは使えそうかな、POSIX pipe自体はこれを読めばいい、POSIX pipeを使ってgnuplotを操作する方法も基本的にgnuplotのコマンドを送ればいいのですが、プログラムから一時ファイル等の作成をせずにどうやってgnuplotへデータを送るかが問題です。これも調べれば直ぐにわかる訳でして、'plot "-"'みたいに"-"をファイル名としてplotコマンドに与えてあげれば、データをファイルからではなく標準入力から読むようになります。で"e"で始まる行入力をすればデータの終端として認識し、データの読み込みを終了します。

これだけ情報があれば、ねこさんでも書けるかな?…一番問題になりそうなのは最近ねこさんはCで全然コードを書いてないことかも orz

0 件のコメント: