module Fiddle

要約

fiddle の名前空間をなすモジュールです。

UNIX の dlopen(3) や Windows の LoadLibrary() などのダイナミックリンカへの低レベルなインターフェースを提供するモジュールです。

目次

特異メソッド
last_error last_error= win32_last_error win32_last_error=
モジュール関数
dlopen dlunwrap dlwrap free malloc realloc
定数
ALIGN_CHAR ALIGN_DOUBLE ALIGN_FLOAT ALIGN_INT ALIGN_INTPTR_T ALIGN_LONG ALIGN_LONG_LONG ALIGN_PTRDIFF_T ALIGN_SHORT ALIGN_SIZE_T ALIGN_SSIZE_T ALIGN_UINTPTR_T ALIGN_VOIDP BUILD_RUBY_PLATFORM NULL RUBY_FREE SIZEOF_CHAR SIZEOF_DOUBLE SIZEOF_FLOAT SIZEOF_INT SIZEOF_INTPTR_T SIZEOF_LONG SIZEOF_LONG_LONG SIZEOF_PTRDIFF_T SIZEOF_SHORT SIZEOF_SIZE_T SIZEOF_SSIZE_T SIZEOF_UINTPTR_T SIZEOF_VOIDP TYPE_CHAR TYPE_DOUBLE TYPE_FLOAT TYPE_INT TYPE_INTPTR_T TYPE_LONG TYPE_LONG_LONG TYPE_PTRDIFF_T TYPE_SHORT TYPE_SIZE_T TYPE_SSIZE_T TYPE_UINTPTR_T TYPE_VOID TYPE_VOIDP WINDOWS

特異メソッド

last_error -> Integer[permalink][rdoc]

最後に Fiddle::Function#call で C の関数を呼び出した結果設定された errno を返します。

この値はスレッドローカルです。

last_error=(errno)[permalink][rdoc]

Fiddle.last_error で返される値を設定します。

errno は fiddle が設定するのでユーザはこのメソッドを使わないでください。

[PARAM] errno:
設定する errno
win32_last_error -> Integer[permalink][rdoc]

最後に Fiddle::Function#call で C の関数を呼び出した結果設定された errno を返します。

このメソッドは Windows 環境でのみ定義されています。

この値はスレッドローカルです。

win32_last_error=(errno)[permalink][rdoc]

Fiddle.win32_last_error で返される値を設定します。

errno は fiddle が設定するのでユーザはこのメソッドを使わないでください。

このメソッドは Windows 環境でのみ定義されています。

[PARAM] errno:
設定する errno

モジュール関数

dlopen(lib) -> Fiddle::Handle[permalink][rdoc]

ダイナミックライブラリ lib をロードし、 Fiddle::Handle として返します。

Fiddle::Handle.new(lib) と等価です。

[PARAM] lib:
ロードしたいライブラリを文字列で与えます。
[EXCEPTION] Fiddle::DLError:
dlopen(3) に失敗した時に発生します。
dlunwrap(addr) -> object[permalink][rdoc]

指定されたアドレスの Ruby オブジェクトを返します。

[PARAM] addr:
Fiddle.#dlwrap が返した Ruby オブジェクトのアドレス(整数)を指定します。

例:

require 'fiddle'
s = 'abc'
p addr = Fiddle.dlwrap(s)   #=> 136122440
p Fiddle.dlunwrap(addr)     #=> "abc"
dlwrap(obj) -> Integer[permalink][rdoc]

指定されたオブジェクト obj のアドレスを表す整数を返します。

[PARAM] obj:
Ruby のオブジェクトを指定します。

例:

require 'fiddle'
s = 'abc'
p addr = Fiddle.dlwrap(s)   #=> 136122440
p Fiddle.dlunwrap(addr)     #=> "abc"
free(addr) -> nil[permalink][rdoc]

指定された addr が指すメモリ領域を開放します。

必ず Fiddle.#malloc が返した整数を addr に与えなければいけません。そうでない場合、ruby インタプリタが異常終了します。

[PARAM] addr:
Fiddle.#malloc で確保されたメモリ領域を指す整数を指定します。

例:

require 'fiddle'
addr = Fiddle.malloc(10)
p addr               #=> 136942800
Fiddle.free(addr)
malloc(size) -> Integer[permalink][rdoc]

size バイトのメモリ領域を確保し、その領域を指す整数を返します。

メモリを確保できなかった場合、例外 NoMemoryError が発生するか、あるいは ruby インタプリタが強制終了します。

[PARAM] size:
必要なメモリ領域のサイズを整数で指定します。
realloc(addr, size) -> Integer[permalink][rdoc]

addr で指定したメモリ領域を size バイトにリサイズし、その領域を指す整数を返します。

addr には Fiddle.#malloc で確保したメモリ領域を渡します。また、リサイズの結果、返り値が addr と異なる場合があります。

[PARAM] addr:
リサイズしたいメモリアドレス整数
[PARAM] size:
リサイズ後のバイト数

[SEE_ALSO] Fiddle.#malloc

定数

ALIGN_CHAR -> Integer[permalink][rdoc]

C の構造体における char のアライメントの値。

ALIGN_DOUBLE -> Integer[permalink][rdoc]

C の構造体における double のアライメントの値。

ALIGN_FLOAT -> Integer[permalink][rdoc]

C の構造体における float のアライメントの値。

ALIGN_INT -> Integer[permalink][rdoc]

C の構造体における int のアライメントの値。

ALIGN_INTPTR_T -> Integer[permalink][rdoc]

C の構造体における intptr_t のアライメントの値。

ALIGN_LONG -> Integer[permalink][rdoc]

C の構造体における long のアライメントの値。

ALIGN_LONG_LONG -> Integer[permalink][rdoc]

C の構造体における long long のアライメントの値。

ALIGN_PTRDIFF_T -> Integer[permalink][rdoc]

C の構造体における ptrdiff_t のアライメントの値。

ALIGN_SHORT -> Integer[permalink][rdoc]

C の構造体における short のアライメントの値。

ALIGN_SIZE_T -> Integer[permalink][rdoc]

C の構造体における size_t のアライメントの値。

ALIGN_SSIZE_T -> Integer[permalink][rdoc]

C の構造体における ssize_t のアライメントの値。

ALIGN_UINTPTR_T -> Integer[permalink][rdoc]

C の構造体における uintptr_t のアライメントの値。

ALIGN_VOIDP -> Integer[permalink][rdoc]

C の構造体における void* のアライメントの値。

BUILD_RUBY_PLATFORM -> String[permalink][rdoc]

ビルドに用いた ruby のプラットフォームを表す文字列。

通常、Object::RUBY_PLATFORM と同じ。

NULL -> DL::CPtr[permalink][rdoc]

C の NULL ポインタ

RUBY_FREE -> Integer[permalink][rdoc]

ruby_xfree の関数ポインタのアドレスの値。

SIZEOF_CHAR -> Integer[permalink][rdoc]

Cでの sizeof(char) の値

SIZEOF_DOUBLE -> Integer[permalink][rdoc]

Cでの sizeof(double) の値

SIZEOF_FLOAT -> Integer[permalink][rdoc]

Cでの sizeof(float) の値

SIZEOF_INT -> Integer[permalink][rdoc]

Cでの sizeof(int) の値

SIZEOF_INTPTR_T -> Integer[permalink][rdoc]

Cでの sizeof(intptr_t) の値

SIZEOF_LONG -> Integer[permalink][rdoc]

Cでの sizeof(long) の値

SIZEOF_LONG_LONG -> Integer[permalink][rdoc]

Cでの sizeof(long long) の値

SIZEOF_PTRDIFF_T -> Integer[permalink][rdoc]

Cでの sizeof(ptrdiff_t) の値

SIZEOF_SHORT -> Integer[permalink][rdoc]

Cでの sizeof(short) の値

SIZEOF_SIZE_T -> Integer[permalink][rdoc]

Cでの sizeof(size_t) の値

SIZEOF_SSIZE_T -> Integer[permalink][rdoc]

Cでの sizeof(ssize_t) の値

SIZEOF_UINTPTR_T -> Integer[permalink][rdoc]

Cでの sizeof(uintptr_t) の値

SIZEOF_VOIDP -> Integer[permalink][rdoc]

Cでの sizeof(void*) の値

TYPE_CHAR -> Integer[permalink][rdoc]

C の char 型を表す定数。

unsigned char を表すには符号を逆転させます。

TYPE_DOUBLE -> Integer[permalink][rdoc]

C の double 型を表す定数。

TYPE_FLOAT -> Integer[permalink][rdoc]

C の float 型を表す定数。

TYPE_INT -> Integer[permalink][rdoc]

C の int 型を表す定数。

unsigned int を表すには符号を逆転させます。

TYPE_INTPTR_T -> Integer[permalink][rdoc]

C の intptr_t 型を表す定数。

TYPE_LONG -> Integer[permalink][rdoc]

C の long 型を表す定数。

unsigned long を表すには符号を逆転させます。

TYPE_LONG_LONG -> Integer[permalink][rdoc]

C の long long 型を表す定数。

unsigned long long を表すには符号を逆転させます。

TYPE_PTRDIFF_T -> Integer[permalink][rdoc]

C の ptrdiff_t 型を表す定数。

TYPE_SHORT -> Integer[permalink][rdoc]

C の short 型を表す定数。

unsigned short を表すには符号を逆転させます。

TYPE_SIZE_T -> Integer[permalink][rdoc]

C の size_t 型を表す定数。

TYPE_SSIZE_T -> Integer[permalink][rdoc]

C の ssize_t 型を表す定数。

TYPE_UINTPTR_T -> Integer[permalink][rdoc]

C の uintptr_t 型を表す定数。

TYPE_VOID -> Integer[permalink][rdoc]

C の void を表す定数。

TYPE_VOIDP -> Integer[permalink][rdoc]

C の void* 型を表す定数。

WINDOWS -> bool[permalink][rdoc]

Windows 上ならば真です。