stdlib_libraries/fiddle_handles_no_parens.rb
tests/_examples/stdlib_libraries/fiddle_handles_no_parens.rb in the metorex repository.
# Fiddle::Handle opens a shared library, or the program itself, and answers
# the address each symbol in it is loaded at.
require "fiddle"
begin
Fiddle::Handle.new("doesnotexist.doesnotexist")
rescue Fiddle::DLError => error
p error.class.ancestors.take(3)
end
program = Fiddle::Handle.new(nil)
strlen = program.sym "strlen"
p [strlen.is_a?(Integer), strlen > 0, program["strlen"] == strlen]
p Fiddle::Handle::DEFAULT.sym("strlen") == Fiddle::Handle.sym("strlen")
begin
program.sym "no_such_symbol_here"
rescue Fiddle::DLError => error
p error.message
end
p program.close
begin
program.close
rescue Fiddle::DLError => error
p error.message
end
begin
program.sym "strlen"
rescue Fiddle::DLError => error
p error.message
end
Output:
[Fiddle::DLError, Fiddle::Error, StandardError]
[true, true, true]
true
"unknown symbol \"no_such_symbol_here\""
0
"dlclose() called too many times"
"closed handle"