new(lib, flags=DL::RTLD_LAZY|DL::RTLD_GLOBAL) -> DL::Handle[permalink][rdoc]new(lib, flags=DL::RTLD_LAZY|DL::RTLD_GLOBAL) {|handle| ... } -> DL::Handle-
ライブラリ lib をオープンし、Handle オブジェクトとして返します。
ブロックを指定すれば、生成した Handle を引数としてブロックを実行します。 Handle はブロックの終りで自動的にクローズされます。
flags で dlopen(3) の第2引数として渡すフラグを指定できます。 DL::RTLD_LAZY、DL::RTLD_NOW のどちらか一方を指定する必要があり、またそれに DL::RTLD_GLOBAL と OR を取ることができます。詳しい意味は manpage(dlopen(3)) を参照してください。
- [PARAM] lib:
- ライブラリを文字列で指定します。
- [PARAM] flags:
- フラグ
- [EXCEPTION] DL::DLError:
- ライブラリのオープンに失敗した場合に発生します
例:
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