前提・実現したいこと
c++で_popenを用いてgnuplotを開き、fprintfでコマンドを送る。その際にgnuplot側での出力結果をc++で受け取りたい。
発生している問題・エラーメッセージ
今下記のコードでgnuplotを実行することはできています。
c++
1FILE *gp; 2 3gp = _popen("gnuplot.exe", "w"); 4fprintf(gp, "plot sin(x)\n"); 5fprintf(gp, "set terminal\n"); 6 7fflush(gp);
しかし、2つ目のコマンドやエラーメッセージの出力結果を受け取る方法が分かりません。本来set terminal
を実行したら、利用可能な出力端末の一覧がgnuplotターミナルに出力されます。これをc++側でstring型などで受け取りたいです。開発環境(Qt)のアプリケーション出力には、gnuplotのコマンドの実行エラーや上記の出力がされています。
試したこと
調べたところ、_popenで外部コマンドの実行結果を受け取る方法としてfgets()が紹介されていました。それを試してみたのですが、書き込み指定の"w"では何も受け取らず、読み込み指定の"r"でパイプを開いても上手く実行されませんでした。
c++
1FILE *gp; 2 3gp = _popen("gnuplot.exe", "w"); 4fprintf(gp, "plot sin(x)\n"); 5fprintf(gp, "set terminal\n"); 6 7char buf[256]; 8while(fgets(buf, 256, gp) != NULL) { 9 printf("out : %s", buf); 10} 11 12fflush(gp);
_popenにwを指定した場合の出力結果。書き込み専用だから当然??
out : out : out : out : out : out : out : out : out : out : out : out : out : out : out : out :
_popenにrを指定した場合、gnuplotは起動せずアプリケーションも応答なし。
補足情報(FW/ツールのバージョンなど)
・開発環境 Qt Creator 6.2.0 MSVC2019 64bit
・コンパイラ Microsoft Visual C++ Compiler 16.10.31402.337(amd64)
・gnuplot version 5.2 patchlevel 8
具体的にはQt Creatorで作ったGUIアプリからボタンを押したらgnuplotが起動するようにしている。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。