著者:崎間
Cのopen()関数はたとえばファイルをオープンしてfprintf()関数でファイル出力や入力をするものでした.それと同じような関数に,popen()関数があります. popen()を使うことで,プログラムから子プロセスとしてコマンドを実行することができます.そのコマンドの引数はfprintf()で渡すことができます.
popen()関数をつかう手順はつぎのようなものです.
FILE *gid; ... gid = popen("コマンド", "w"); ... fprintf(gid, "コマンドの引数\n"); ... pclose(gid);
コマンドとなるポインタgidをつくってそれに実行したいコマンド名を指定し,引数をfprintf()関数でgidに渡します.コマンド実行はシェルのパイプ機能で行われます.
popen()を使って,たとえばCから直接グラフィックソフトのgnuplotを呼ぶことができます.つぎのソースを実行すると sin x のグラフが表示されます.
#include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { FILE *gid; gid = popen("gnuplot -persist", "w"); fprintf(gid, "plot sin(x)\n"); pclose(gid); return 0; }
このソースコードをsin.cという名前で保存して,
$ gcc -lm sin.c -o sin ./sin
とコンパイル,実行します.するとつぎのグラフが表示されると思います.