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

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

新規登録して質問してみよう
ただいま回答率
85.49%
C

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

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

1回答

5465閲覧

processingでコンパイルしたc言語のファイルを実行するやり方

523523syu

総合スコア12

C

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

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2015/11/24 00:50

macでc言語をターミナルを使ってコンパイルした『hogehoge.out』というファイルをprocessingで実行するのはどうすれば良いのでしょうか?

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

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

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

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

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

guest

回答1

0

私は Mac を持っていないのですが、
この問題については大きな違いはないと思いますので、ubuntu 上で実行した結果について
少しでもお役に立てばと思い説明します。
(※何か見当違いなことをお答えしてしまっていたらご容赦願います。)

まず、あなたのご希望の動作をする(であろう)最小限の
Processing のコードは以下のようなものになると思います。
(※hogehoge.out はフルパスで指定したほうが確実だと思います。)

processing

1void setup() 2{ 3 try { 4 Runtime.getRuntime().exec("hogehoge.out"); 5 } catch ( IOException e ) { 6 System.out.println(e); 7 } 8 exit(); 9}

最低限のコードですので、以下の二点の問題があります。

一つ目はこの場合 Processing の処理と hogehoge.out の処理は並行して動くということです。

例えば、hogehoge.out の実行結果を Processing 側で使いたいような場合、

processing

1Runtime.getRuntime().exec("hogehoge.out");

の直後にその結果(出力ファイルなど)を読み取ろうとしても、
まだ処理中かもしれません。

hogehoge.out の終了を待つには以下のようにします。

Processing

1void setup() 2{ 3 try { 4 Process p = Runtime.getRuntime().exec("hogehoge.out"); 5 p.waitFor(); 6 } catch ( Exception e ) { 7 System.out.println(e); 8 } 9 exit(); 10}

これで、

Processing

1p.waitFor();

の部分でhogehoge.out の終了を待つようになります。
ただ、Processing をお使いならよくご存知だと思いますが、
setup() メソッドなどで一回だけ実行する場合はこれでだいたい問題ないと思いますが、
draw() メソッドのような処理の中でこのような処理を行おうとした場合、
処理が止まってしまいますので、工夫が必要だと思います。

二つ目は、コンソール入出力するプログラムにはこのままでは対応できていないことです。

hogehoge.out が GUI を持つアプリの場合、ほぼ期待通りの動作をすると思いますが、
helloworld のような、printf() などを使って
コンソール(ターミナル)にメッセージを出力するアプリの場合は、
コンソールには何も出力されません。

これは

Processing

1Runtime.getRuntime().exec("hogehoge.out");

で使用しているメソッドが、プログラム起動時に、起動するプログラム(hogehoge.out)の
標準入出力+標準エラー出力についてパイプラインを生成して自分のプロセス(この場合は Processing 側)
につないでいるからです。

この点についてきちんと処理しようとするとスレッドやバッファを使ったプログラムを作らなければならないのですが、説明が質問の趣旨を外れて長くなりすぎますので、
ここでは、確実な動作や耐久性を度外視して、簡単さだけを優先した、とりあえずだいたいの場合はほぼ動くコードを
書いておきます。

Processing

1void setup() 2{ 3 try { 4 Process p = Runtime.getRuntime().exec("hogehoge.out" ); 5 byte[] b = new byte[1]; 6 while ( p.getInputStream().read(b,0,1) != -1 ) { 7 System.out.write(b,0,1); 8 } 9 10 p.waitFor(); 11 } catch ( Exception e ) { 12 System.out.println(e); 13 } 14 exit(); 15}

おそらく、Java に詳しい方に見せるとお小言を食らう事確実なコードなので注意してください。
(※それと標準エラー出力の処理も省いてあるので標準エラー出力の内容は出ないままです。)
それでもとりあえずの動作確認程度には使えると思います。
外部プログラムをつかってどういったことをなさろうとしているのか分からないので、
これ以上の詳しい説明は省きます。
これより詳しいことは、”Java における外部プログラムの実行”としてお調べになったほうがいいと思います。

Processing は Java をラップする形で作られている言語ですので、
Processing 固有の機能(グラフィックなど)以外の機能について、
「Processing で◯◯するにはどうすればいいか」という質問は、
ほぼ「Java で◯◯するにはどうすればいいのか」という意味になります。
Processing ユーザよりも Java ユーザのほうがはるかに多いので、
この種の問題では、
Java と Processing の関係が理解できてきたら、
Java の問題として質問したり、調べたりしたほうが、より早く、より多くの情報が得られると思います。
今回お答えした内容も Java の外部プログラム起動に関して調べた結果をお話ししています。

投稿2015/12/15 15:15

kozuchi

総合スコア1193

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

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

退会済みユーザー

退会済みユーザー

2015/12/15 16:03

少し補足をさせていただきますと、たとえ不要でも実際のコードでは標準出力/標準エラー出力は処理しておくべきです。明示的に読んで捨てないと、(バッファがいっぱいになって?)I/O待のような状態に陥り、プロセスが止まってしまう事象が発生した経験があります。 当時はAntのexecタスクのソースを見ながら実装した記憶があります。もしかしたら今でも参考になるかもしれません。(互換性維持のため古めかしい書式になってるかもですが…)
kozuchi

2015/12/16 11:56

補足ありがとうございます。 確かに、作られたパイプをそのままにしておくというのも気持ち悪い話で、 きちんとしておかないとトラブルの原因になりますね。 私は Processing は書き捨てのコードを書くことが多いので、そのあたりちょっと配慮が欠けていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問