Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > dlライブラリ > DL::Handleクラス

class DL::Handle

クラスの継承リスト: DL::Handle < Object < Kernel < BasicObject

要約

オープンされたダイナミックライブラリを表すクラスです。 dlopen(3) が返すハンドラーのラッパーです。

特異メソッド

new(lib) -> DL::Handle
new(lib) {|handle| ... } -> DL::Handle

ライブラリ lib をオープンし、Handle オブジェクトとして返します。

ブロックを指定すれば、生成した Handle を引数としてブロックを実行します。 Handle はブロックの終りで自動的にクローズされます。

[PARAM] lib:
ライブラリを文字列で指定します。

例:

require 'dl'

h = DL::Handle.new('libc.so.6')
i = h.sym('strlen') #=> 3085201584
cfunc = DL::CFunc.new(i, DL::TYPE_INT, 'strlen')
p cfunc.call(['abcde'].pack('p*').unpack('l!*'))   #=> 5

インスタンスメソッド

sym(func) -> Integer
self[func] -> Integer

関数やグローバル変数 func へのポインタを取得し、整数として返します。

[PARAM] func:
得たいシンボルの名前を文字列で与えます。
[EXCEPTION] RuntimeError:
シンボルが見つからなかった時に発生します。

例:

require 'dl'

h = DL::Handle.new('libc.so.6')
i = h.sym('strlen')
p i                                                #=> 3085201584
cfunc = DL::CFunc.new(i, DL::TYPE_INT, 'strlen')
p cfunc.call(['abcde'].pack('p*').unpack('l!*'))   #=> 5
close -> Integer

自身をクローズします。成功した場合は 0 を返します。そうでない場合は、 0 以外の整数を返します。

enable_close -> nil
disable_close -> nil

GC によるオブジェクトの回収時に自身をクローズするかどうかを指定します。

to_i -> Integer

自身が表すハンドル(dlopen(3) が返したもの)のアドレスを返します。

class DL::Handle