09/09/29
CからRubyを実行してみるテスト
ruby | |
<09/30追記>
ruby_run()が動いたのでそれを使ったver.をやってみた→CからRubyを実行してみるテストその2
<追記ここまで>
そのうち、生ハード上でRubyが動くようになったら、ブート時にそのRubyインタプリタを起動させて、ディスクのどっかに入れるRubyソースを実行する事になる。その前段階として、CからどうやってRubyを実行するんだ、というのがありまして。
ちょこちょこネット上を彷徨って調べたのですが、ふと見てみた「Rubyアプリケーションプログラミング(オーム社)」に書いてあった……うん……ただちょっと情報が古いが。
あとRubyの中にあるREADME.EXT.jaを読んだんだけど、これも情報が古いんだよな……既にruby_run()がなくなっててruby_run_node()になっているという。名前変わっただけじゃなくて、引数にruby_options(argc, argv)を取るようになってるし。だれかドキュメント……。
閑話休題。下にソースを投げてみる。
#include <string.h> #include "ruby.h" int main(int argc, char ** argv) { FILE *fp; char *buf; char src[500]; src[0]='\0'; ruby_init(); fp=fopen("test.rb", "r"); while( fgets( buf, 100, fp ) != NULL ){ strcat(src, buf); } rb_eval_string(src); fclose(fp); return 0; }
test.rbの内容をbufで読み込んでsrcにどんどんくっつけていき、最後にrb_eval_string()でsrcを、つまりtest.rbを実行してる。
上で触れたruby_run_node()は使ってないけど、どうせファイルシステムも何もない所で実行するので、最初からソースで実行させるパターンをテストしてみた。だから、実際に読み込む時は別の手段を考える。
で、コンパイル→実行はこうする。ちなみにcygwinでやった。Ubuntuで後から試す時はパス変えないと。
gcc -I/usr/lib/ruby/1.8/i386-cygwin/ -c test.c gcc -o test test.o -L/usr/lib -lruby -ldl -lcrypt -lm ./test.exe
とすると、test.rbが実行される。
しかし、最近Cを読みはするけど全然書かないから、何をどう書けばいいのか完全に失念している……文字列の扱いとかファイル操作とか。これでいいのか本当に……。いかにCに触れてないかがわかるな(笑)元々Cってそんなに好きじゃないし……。