class Fiddle::Handle

[edit]

要約

オープンされたダイナミックライブラリを表すクラスです。

dlopen(3) が返すハンドラーのラッパーです。

目次

特異メソッド
インスタンスメソッド
定数

特異メソッド

sym(func) -> Integer[permalink][rdoc][edit]
self[func] -> Integer

ライブラリのデフォルトの検索順序に従い、現在のライブラリ以降のシンボルを探します。

Fiddle::Handle::NEXT.sym(func) と同じです。詳しくは dlsym(3) の RTLD_NEXT を見てください。

[EXCEPTION] Fiddle::DLError:
シンボルが見つからなかった時に発生します。
new(lib, flags=Fiddle::Handle::RTLD_LAZY|Fiddle::Handle::RTLD_GLOBAL) -> Fiddle::Handle[permalink][rdoc][edit]
new(lib, flags=Fiddle::Handle::RTLD_LAZY|Fiddle::Handle::RTLD_GLOBAL) {|handle| ... } -> Fiddle::Handle

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

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

flags で dlopen(3) の第2引数として渡すフラグを指定できます。 Fiddle::Handle::RTLD_LAZYFiddle::Handle::RTLD_NOW のどちらか一方を指定する必要があり、またそれに Fiddle::Handle::RTLD_GLOBAL と OR を取ることができます。詳しい意味は manpage(dlopen(3)) を参照してください。

[PARAM] lib:
ライブラリを文字列で指定します。
[PARAM] flags:
フラグ
[EXCEPTION] Fiddle::DLError:
ライブラリのオープンに失敗した場合に発生します

例:

require 'fiddle'

h = Fiddle::Handle.new('libc.so.6')
i = h.sym('strlen')
func = Fiddle::Function.new(i, [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT)
p func.call("uxyz") # => 4

インスタンスメソッド

sym(func) -> Integer[permalink][rdoc][edit]
self[func] -> Integer

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

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

h = Fiddle::Handle.new('libc.so.6')
p h.sym('strlen') # 関数ポインタのアドレスを整数で表示
close -> Integer[permalink][rdoc][edit]

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

[SEE_ALSO] dlclose(3)

close_enabled? -> bool[permalink][rdoc][edit]

GC によるオブジェクトの回収時に self をクローズする(Fiddle::Handle#close) かどうかを真偽値で返します。

[SEE_ALSO] Fiddle::Handle#enable_close, Fiddle::Handle#disable_close

disable_close -> nil[permalink][rdoc][edit]

GC によるオブジェクトの回収時に self をクローズしない(Fiddle::Handle#close) ように設定します。

デフォルトでは close しません。

[SEE_ALSO] Fiddle::Handle#enable_close, Fiddle::Handle#close_enabled?

enable_close -> nil[permalink][rdoc][edit]

GC によるオブジェクトの回収時に self をクローズする(Fiddle::Handle#close) ように設定します。

デフォルトでは close しません。

[SEE_ALSO] Fiddle::Handle#disable_close, Fiddle::Handle#close_enabled?

to_i -> Integer[permalink][rdoc][edit]

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

定数

DEFAULT -> Fiddle::Handle[permalink][rdoc][edit]

RTLD_DEFAULT で表わされる疑似ハンドルを表します。

詳しくは dlsym(3) を参照してください。

NEXT -> Fiddle::Handle[permalink][rdoc][edit]

RTLD_NEXT で表わされる疑似ハンドルを表します。

詳しくは dlsym(3) を参照してください。

RTLD_GLOBAL -> Integer[permalink][rdoc][edit]

dlopen のフラグ RTLD_GLOBAL を表す定数です。

DL::Handle.new の flags として用います。

詳しくは dlopen(3) を見てください。

RTLD_LAZY -> Integer[permalink][rdoc][edit]

dlopen のフラグ RTLD_LAZY を表す定数です。

DL::Handle.new の flags として用います。

詳しくは dlopen(3) を見てください。

RTLD_NOW -> Integer[permalink][rdoc][edit]

dlopen のフラグ RTLD_NOW を表す定数です。

DL::Handle.new の flags として用います。

詳しくは dlopen(3) を見てください。