RubyからCのヘッダ定義を読み込みたい
RubyからCのヘッダ定義を読み込みたい。というか
ヘッダで定義してある値を使いたい。
っていうのは、Rubyでioctlしてみようとした時に
パラメータが必要なので。
具体的には(うちの環境では) /usr/include/linux/soundcard.h
に書いてある、SOUND_PCM_READ_RATEとかSOUND_PCM_READ_CHANNELSとか。
Cのプログラムに吐き出させるのが間違いが無いと思いましたので
erubyでCのSourceを吐くようにする。
#include <stdio.h> #include "/usr/include/linux/soundcard.h" <% ary = [ :SOUND_PCM_READ_RATE , :SOUND_PCM_READ_CHANNELS, :SOUND_PCM_READ_BITS, :SNDCTL_DSP_GETBLKSIZE, ] %> int main(void) { printf("module SoundCard\n Param = {\n"); <% ary.each do |i| %> printf(" :<%= i.to_s %> => 0x%x,\n", <%=i%>); <% end %> printf(" }\nend\n"); return 0; }
コンパイルして実行したらrubyでrequireできる
ファイルができています。
module SoundCard Param = { :SOUND_PCM_READ_RATE => 0x80045002, :SOUND_PCM_READ_CHANNELS => 0x80045006, :SOUND_PCM_READ_BITS => 0x80045005, :SNDCTL_DSP_GETBLKSIZE => 0xc0045004, } end
以上をやった後に以下のURLに欲しかった定義が
rubyファイルになっているのが見つかってorz
http://gridflow.ca/latest/devices4ruby/SoundPCM.rb
これはスバラシイ。
まぁそれは気にしないとして、erubyの<% %>ってhtmlに埋め込むとhtmlタグにまぎれて
気にならないけどC言語とかに埋め込むと微妙に見えますねー、という感想でした。
Cとかの代替案だと/% %/とかが良いのかなー
追記(修正あり):
id:rubikitchさんにerubisなら -p '/% %/'でできるよ。
って教えてもらいました。ありがとうございます。
eRubyのembedded patternを変更する - ’(rubikitch wanna be (a . lisper))
http://d.hatena.ne.jp/rubikitch/20080217/erubis