種類
- インスタンスメソッド (72)
- ライブラリ (36)
- クラス (12)
ライブラリ
-
fiddle
/ import (84)
モジュール
-
Fiddle
:: Importer (72)
キーワード
- CStruct (12)
-
create
_ value (12) - fiddle (12)
-
fiddle
/ import (12) -
fiddle
/ types (12) - sizeof (12)
- typealias (12)
- union (12)
- value (12)
検索結果
先頭5件
-
Fiddle
:: Importer # struct(signature) -> Class (21125.0) -
C の構造体型に対応する Ruby のクラスを構築して返します。
...れを
配列で signature に渡してデータを定義します。例えば C における
struct timeval {
long tv_sec;
long tv_usec;
};
という構造体型に対応して
Timeval = struct(["long tv_sec", "long tv_usec"])
として構造体に対応するクラスを生成しま......されるクラスは Fiddle::CStruct を継承しています。詳しくは
そちらを参照してください。
@param signature 構造体の各要素を文字列で表現したものの配列
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload "libc.so.6"
ext......ern "int gettimeofday(void*, void*)"
Timeval = struct(["long tv_sec", "long tv_usec"])
end
time = M::Timeval.malloc
M.gettimeofday(time, Fiddle::NULL)
p time.tv_sec
p time.tv_usec... -
Fiddle
:: CStruct (6048.0) -
C の構造体を表すクラスです。
...造体を表すクラスです。
このクラスは直接は使わず、Fiddle::Importer#struct を用いて
このクラスを継承したクラスを生成し、それを利用します。
Fiddle::Importer#struct が生成するクラスには
構造体の各メンバへのアクセサが定義......アクセサはシグネチャの型とメンバ名に従って定義されます。
例えば
require 'fiddle/import'
include Fiddle::Importer
S = struct(["long foo", "void* bar"])
とすると、 S#foo, S#foo= というアクセサが Integer とやりとり
するように定義され、 S......されます。
このクラスは実際にはこのドキュメントに書かれているメソッドを保持していません。
Fiddle::Importer#struct によって動的にメソッドが定義されます。
このドキュメントは説明の便宜のためだと考えてください。... -
Fiddle
:: Importer # create _ value(type , val = nil) -> Fiddle :: CStruct (3138.0) -
型が type で要素名が "value" であるような構造体を 定義(Fiddle::Importer#struct)し、 その構造体のメモリを Fiddle::CStruct#malloc で確保し、 確保したメモリを保持しているオブジェクトを返します。
...型が type で要素名が "value" であるような構造体を
定義(Fiddle::Importer#struct)し、
その構造体のメモリを Fiddle::CStruct#malloc で確保し、
確保したメモリを保持しているオブジェクトを返します。
type は "int", "void*" といった文字列......された構造体に
その値を代入します。
@param type 型を表す文字列
@param val 構造体に確保される初期値
例
require 'fiddle/import'
module M
extend Fiddle::Importer
end
v = M.value("int", 32)
p v.value # => 32
v.value = 48
p v.value # => 48... -
Fiddle
:: Importer # value(type , val = nil) -> Fiddle :: CStruct (3138.0) -
型が type で要素名が "value" であるような構造体を 定義(Fiddle::Importer#struct)し、 その構造体のメモリを Fiddle::CStruct#malloc で確保し、 確保したメモリを保持しているオブジェクトを返します。
...型が type で要素名が "value" であるような構造体を
定義(Fiddle::Importer#struct)し、
その構造体のメモリを Fiddle::CStruct#malloc で確保し、
確保したメモリを保持しているオブジェクトを返します。
type は "int", "void*" といった文字列......された構造体に
その値を代入します。
@param type 型を表す文字列
@param val 構造体に確保される初期値
例
require 'fiddle/import'
module M
extend Fiddle::Importer
end
v = M.value("int", 32)
p v.value # => 32
v.value = 48
p v.value # => 48... -
Fiddle
:: Importer # typealias(new , orig) -> () (3046.0) -
extern や struct で利用する型の別名を定義します。
...extern や struct で利用する型の別名を定義します。
@param new 別名(文字列)
@param orig 別名を付けたい型の名前(文字列)
@see Fiddle::Importer#extern, Fiddle::Importer#sizeof,
Fiddle::Importer#struct, Fiddle::Importer#union... -
Fiddle
:: Importer # sizeof(t) -> Integer (3030.0) -
C における sizeof(t) の値を返します。
...zeof("char*") は環境によって 4 や 8 といった値を返します。
Fiddle::Importer#struct で定義した
構造体クラスを渡すと、その構造体のサイズを返します。
Fiddle::Importer#union で定義した共用体クラスも同様です。
t がクラスの場合、......ている型を Fiddle が知らなかった
場合に発生します
例:
require 'fiddle/import'
module M
extend Fiddle::Importer
Timeval = struct(["long tv_sec", "long tv_usec"])
p sizeof("char") # => 1
p sizeof("void*") # => 8
p sizeof(Timeval) # => 16
end... -
Fiddle
:: Importer # union(signature) -> Class (3018.0) -
C の共用体型に対応する Ruby のクラスを構築して返します。
...る方法は Fiddle::Importer#struct と
ほぼ同様です。C における
typedef union epoll_data
{
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
} epoll_data_t;
は、Ruby上では
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload "libc.so.6"... -
fiddle (54.0)
-
*.dllや*.soなど、ダイナミックリンクライブラリを扱うためのライブラリです。
...ライブラリを require して
Fiddle::Importer モジュールを使用します。
dl と基本的な使いかたは良く似ています。
Fiddle モジュール自体はプリミティブな機能しか提供していません。
Fiddle::Importer モジュールは以下のようにユー......ザが定義した
モジュールを拡張する形で使います。
require "fiddle/import"
module M
extend Fiddle::Importer
end
以後、このモジュールで dlload や extern などのメソッドが使用できるようになります。
以下のように dlload を使って......得たい場合は以下のとおりです。
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload "libc.so.6"
extern('int gettimeofday(void *, void *)')
Timeval = struct( ["long tv_sec",
"long tv_usec"])
end
timeval = M::Timeval.malloc
e = M.gett......方
通常は fiddle/import ライブラリを require して
Fiddle::Importer モジュールを使用します。
Fiddle モジュール自体はプリミティブな機能しか提供していません。
Fiddle::Importer モジュールは以下のようにユーザが定義した
モジュー......ルを拡張する形で使います。
require "fiddle/import"
module M
extend Fiddle::Importer
end
以後、このモジュールで dlload や extern などのメソッドが使用できるようになります。
以下のように dlload を使ってライブラリをロードし、... -
fiddle
/ import (42.0) -
fiddle ライブラリのための高レベルインターフェースを提供するライブラリです。
...。これを呼び出したい場合は以下のように Array#pack を使用します。
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload './libsum.so'
extern 'double sum(double*, int)'
end
p M.sum([2.0, 3.0, 4.0].pack('d*'), 3) #=> 9.0
また与えられた文字......します。これを呼び出すにも以下のように Array#pack を使用します。
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload './libstrfirst.so'
extern 'void first_char(char **, char *, int)'
end
buf = '111'
M.first_char(['Abc', 'Def', 'Ghi'].pack('p*'), b......1, 10, 100, 1241603848]
==== 複雑な構造体を定義したい
構造体をメンバとして持つ構造体を Fiddle::Importer#struct を使って定義することは残念ながらできません。
自力でメンバを展開してから Fiddle::Importer#struct を使ってください。...