C言語(C++言語)で他人が作った大規模なプログラムの一部を書き換えたいのですが、自分はC言語を苦手としておりますので、一部を書き換えてRubyなんかの別のプログラムに引数を渡して呼び出す実装にしたいのです。
(つまり必要なパラメータだけ抜き取って、あとはRubyで実装したい。)
プログラムはかなりの初心者だと思っておりますので、できれば詳細な情報をよろしくお願い致します。
Rubyに限らずコマンドラインから呼び出す形にすればいけるはずです。
一番お手軽なのはsystem関数です(exec関数でも可)。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int a;
char b[10];
char buf[256];
a=1;
strcpy(b, "aaa");
// 引き継ぎたい値をコマンドラインに展開
sprintf(buf, "ruby ./hoge.rb %d %s", a, b);
// コマンドラインで ruby ./hoge.rb 1 aaa を叩くのと大体同じ意味
system(buf);
// C側は終了
exit(0);
}
あとは呼び出されたプログラム側でargvとargcを参照すればOKです(RubyだとARGVですかね?)。
Rubyに限らずコマンドラインから呼び出す形にすればいけるはずです。
一番お手軽なのはsystem関数です(exec関数でも可)。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int a;
char b[10];
char buf[256];
a=1;
strcpy(b, "aaa");
// 引き継ぎたい値をコマンドラインに展開
sprintf(buf, "ruby ./hoge.rb %d %s", a, b);
// コマンドラインで ruby ./hoge.rb 1 aaa を叩くのと大体同じ意味
system(buf);
// C側は終了
exit(0);
}
あとは呼び出されたプログラム側でargvとargcを参照すればOKです(RubyだとARGVですかね?)。
これでとりあえず自分の思ってたことはできました!
ありがとうございました!
各言語それぞれにC言語から呼び出す術が異なります。
rubyであれば
http://maspon.wordpress.com/2009/09/20/cc-dynamic-ruby/
perlであれば
http://perldoc.perl.org/perlembed.html#Calling-a-Perl-subroutine...
といった様になります。
簡単にネットから探す方法としては apache のモジュール、mod_xxx に言語名を指定してググるか(mod_ruby/mod_perl)、embedというキーワードをつけると見つけやすいです。
またvimというテキストエディタが複数言語をC言語から呼び出す処理を持っています。
>C言語(C++言語)で他人が作った大規模なプログラムの一部を書き換えたいのですが、
>自分はC言語を苦手としておりますので、一部を書き換えてRubyなんかの別のプログラムに引数を
>渡して呼び出す実装にしたいのです。
ほぼ不可能です。
Rubyでかいて、それをC言語風に書き直すか誰かに書き直してもらうほうが現実的です。
不可能ですか…。
恐らく上述のsystem関数を使うように、間接的に呼び出すやり方しかなく、
直接的に呼び出す方法は無いという意味でしょうか…。
これでとりあえず自分の思ってたことはできました!
ありがとうございました!