Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > dl/importライブラリ > DL::CStructクラス
クラスの継承リスト: DL::CStruct < Object < Kernel < BasicObject
C の構造体を表すクラスです。
このクラスは直接は使わず、DL::Importer#struct を用いて このクラスを継承したクラスを生成し、それを利用します。
DL::Importer#struct が生成するクラスには 構造体の各メンバへのアクセサが定義されています。 このアクセサはシグネチャの型とメンバ名に従って定義されます。 例えば
S = struct(["long foo", "void* bar"])
とすると、 S#foo, S#foo= というアクセサが Integer とやりとり するように定義され、 S#bar, S#bar= というアクセサが DL::CPtr でやりとりするように定義されます。
このクラスは実際にはこのドキュメントに書かれているメソッドを保持していません。 DL::Importer#struct によって動的にメソッドが定義されます。 このドキュメントは説明の便宜のためだと考えてください。
malloc -> DL::CStruct
[permalink][rdoc]構造体のためのメモリを確保し、DL::CStruct の(子孫クラスの) オブジェクトで返します。
C における
return (struct foo*)malloc(sizeof(struct foo));
というコードと対応していると言えます。
new(addr) -> DL::CStruct
[permalink][rdoc]addr のアドレスが指すメモリを構造体のアドレスとみなし、 構造体を作ります。
C におけるキャストと似ています。
return (struct foo*)addr;
というコートと対応していると言えます。
size -> Integer
[permalink][rdoc]構造体のサイズをバイト数で返します。
このメソッドが返す値は C の構造体としてのサイズです。 Ruby のオブジェクトとしてはより大きなメモリを消費しています。
to_i -> Integer
[permalink][rdoc]保持している構造体の先頭アドレスを整数で返します。
to_ptr -> DL::CPtr
[permalink][rdoc]保持している構造体へのポインタを返します。