pipe による gnuplot 利用 †gnuplot を出力 device として application から利用するには、 Unix 系であれば pipe を使うところだが、Windows でうまくいくか どうか心配だった。試してみたところ Windows でも (少なくとも MinGW/gcc では)うまくいくので、しばしこの線を 探る。 しかし、日本語が通らない。一見通ってるように見えるが、通らない。 もう、、いい加減にして欲しい。Shift_JIS で2バイト目に 0x5c が 来ることがあるのは、日本語扱ったことのある人なら常識中の常識なんだが、、 「表示」の「表」の字やら、「構造」の「構」の字やらを出してみれば すぐわかる話なのに。しかも、本体では encoding utf8 が指定できるので utf8 で逃げようとしても window terminal では無視されてるみたいだし。 まあ iconv も日本語 patch なるものを当てないと、同じ問題を抱えてる みたいだし、今では UNICODE が default になっている Windows programming から 見ると、とてつもなく前時代に戻った気がする。 例題その 1 †sin(x + dx) のグラフを dx を 0 - 9 まで1秒間に 1 ずつ増や しながら plot する。gnuplot の実行 file のありかに PATH が通っている こと。通っていない場合は、popen() の "gnuplot" の部分を full path にする。 /* gtest3.c -- invoke gnuplot with pipe */ /* Compile and link * Windows (MinGW) * gcc -o gtest3.exe -DWIN32 gtest3.c * Linux * gcc -o gtest3 gtest3.c */ #include <stdio.h> #ifdef WIN32 #include <windows.h> #else #include <unistd.h> #endif /* WIN32 */ int main() { FILE *fgpl; int i; char sbuf[128]; fgpl = popen("gnuplot","w"); for(i = 0; i < 10; i++) { sprintf(sbuf, "plot sin(x+%d)\n", i); rewind(fgpl); fprintf(fgpl, sbuf); fflush(fgpl); #ifdef WIN32 Sleep(1000); #else usleep(1000000L); #endif /* WIN32 */ } pclose(fgpl); return 0; } 注:
|