質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

gnuplot

gnuplot(ニュープロット)は、2次元や3次元のグラフ作成ができるソフトウェアです。さまざまな数式やデータ集計などのグラフを描写することが可能で、特に2次元グラフを描画する機能は強力です。

Bash on Ubuntu on Windows

Bash on Ubuntu on Windowsは、Windows Subsystem for Linux(WSL)の非推奨の名称。Windows10およびWindows Server上でLinuxのバイナリ実行ファイルをネイティブ実行するための互換レイヤーです。

Q&A

解決済

3回答

2144閲覧

Ubuntu上で、C言語のスクリプトを使ってgnuplotを動かしたい

geospace291

総合スコア6

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

gnuplot

gnuplot(ニュープロット)は、2次元や3次元のグラフ作成ができるソフトウェアです。さまざまな数式やデータ集計などのグラフを描写することが可能で、特に2次元グラフを描画する機能は強力です。

Bash on Ubuntu on Windows

Bash on Ubuntu on Windowsは、Windows Subsystem for Linux(WSL)の非推奨の名称。Windows10およびWindows Server上でLinuxのバイナリ実行ファイルをネイティブ実行するための互換レイヤーです。

0グッド

0クリップ

投稿2021/07/10 00:32

編集2021/07/10 05:09

前提・実現したいこと

Ubuntu20.04LTSからWindows上のgnuplotをC言語のスクリプトで操作したい。

発生している問題・エラーメッセージ

popen関数でwindows上のgnuplotを起動することは出来たものの、fprintf関数で命令を渡すことができません。
書き込むことができません。

該当のソースコード

ソースコードにおかしな点がありましたら、ご指摘ください。

C

1#include <stdio.h> 2#include <stdlib.h> 3#include <unistd.h> 4 5#define GNUPLOT_PATH "/mnt/c/'Program Files'/gnuplot/bin/wgnuplot.exe" 6#define SEC 1000000 7#define WAIT (10*SEC) 8 9int main(){ 10 FILE *gp; 11 12 gp = popen(GNUPLOT_PATH,"w"); 13 if(gp==NULL){ 14 fprintf(stdout,"popen error gp[%p]\n".gp); 15 return -1; 16 } 17 18 fprintf(gp,"set xrange [-10:10]\n"); //範囲の指定 19 fprintf(gp,"set yrange [-1:1]\n"); 20 21 fprintf(gp,"plot sin(x)\n"); //sin(x)の描画 22 23 fflush(gp); 24 usleep(WAIT); 25 26 pclose(gp); 27}

試したこと

ファイルパーミッションがないことを疑って、管理者権限でコマンドプロンプトを開いてbashを起動した状態で、
実行をしたものの、gnuplotは起動したのですが、命令は~~読み込んでいませんでした。~~書き込めませんでした。

補足情報(FW/ツールのバージョンなど)

WSL(Ubuntu20.04LTS)
Windows10 Home (version: 20H2)
gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)

質問者本人はほぼ初心者です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

geospace291

2021/07/10 00:57

Ubuntu上にもgnuplotは入ってるので、そちらをスクリプトで動かす方が簡単であれば、その方法を教えていただきたいです。
otn

2021/07/10 02:10

> fprintf関数で命令を渡すことができません。 具体的な現象は何でしょうか?fprintfの返り値を確認しているわけでも無いし。
geospace291

2021/07/10 02:42

このコードで作成した実行ファイルを実行させると、windows上のgnuplotが起動するだけという感じですね。私の意図としてはubuntu上で書き込んだスクリプトでwin上のgnuplotに書き込みたいという感じなのですが…。(回答になっていますでしょうか…?)
guest

回答3

0

ベストアンサー

Ubuntu上にもgnuplotは入ってるので、そちらをスクリプトで動かす方が簡単であれば、その方法を教えていただきたいです。

Xサーバさえ用意すれば、Ubuntu上のgnuplotもGUIとして動かせます。
ただ、XサーバをどうするかはWSLのバージョンによっても色々あるようです。
Ubuntu20ということはWSL1ではなくて、おそらくWSL2ということになるかと思いますので ( WSL1+Ubuntu20 は問題があるはずなので )、VcXsrvのようなXサーバアプリを使う場合、注意事項があるようです。

https://qiita.com/ryoi084/items/0dff11134592d0bb895c

それか、WSL2なら、WSLgというWSLの用意したXサーバ機能もあるようですが、こちらについては詳しくないので他の方にお任せします。

※「WSL1+Ubuntu20は問題があるはず」は以下のコメントの通り取り消しました

投稿2021/07/10 01:34

編集2021/07/10 03:23
angel_p_57

総合スコア1672

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

geospace291

2021/07/10 02:58

ご回答ありがとうございます。 今、wslのversionを確認したところ、wsl1になっていました…。 また、xserverについてですが、VcXrvを使ってます。添付していただいた記事、大変参考になります。バージョン変換が終了し次第、試してみようと思います。
angel_p_57

2021/07/10 03:22

あ、ごめんなさい。以下の記事で WSL1+Ubuntu20 は N.G. と思っていたのですが、今は修正されているようです ( 情報をアップデートしてませんでした )。ちょっとそこは取り消します。 https://qiita.com/AumyF/items/eaf42dd3345a2285ff9e
geospace291

2021/07/10 04:47

ubuntu上で完結する方法(Xserverは記事の方法でやりました)で動きました!、ありがとうございました!
guest

0

wslを使っていないので的を外しているかもしれませんが,
Windows版のwgnuplot.exeはたしかパイプを受け付けなかったかと思います。
gnuplotでパイプが使える実行ファイルは,
wgnuplot_pipes.exegnuplot.exe(DOS窓が開きます),角藤版ならpgnuplot.exeだったかと思います。

wgnuplot.exeと同じフォルダにあると思うのでぜひ探してみて下さい。

投稿2021/07/10 02:51

ujimushi_sradjp

総合スコア2091

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

geospace291

2021/07/10 03:09

ご回答ありがとうございます。試させていただきます。
geospace291

2021/07/10 04:41

先ほど、wgnuplot_pipes.exeにパイプをつないでみましたが、起動のみで書き込みはされませんでした…。
guest

0

それ、命令を渡してるんじゃなくて、そのファイルに書き込みを行っています
GNUPLOT_PATHのファイルの中身を確認してみよう

#ファイルパスが不正だから書き込まれてない可能性?

投稿2021/07/10 00:34

編集2021/07/10 00:36
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

geospace291

2021/07/10 00:47

ご回答ありがとうございます。 先ほど、wgnuplot.exeをubuntu側から確認してみましたが、書き込まれている様子は確認できませんでした。(.exeは新たに書き込まれた部分も文字化けのようになるのでしょうか…?) あと、ファイルパスが不正でもwin側のgnuplotを起動できることってあるのでしょうか?
angel_p_57

2021/07/10 01:20

> y_waiwaiさん popen(3)の機能くらい調べてから回答しましょうよ… > geospace291さん popenはLinux上のパイプに標準入力・標準出力を結びつける(その上で指定のコマンドを起動する)ものですが、それがWindows上のアプリに適用できるのか、というところが焦点なのかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問