日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

FreeBSD系統(tǒng)內(nèi)核對象( 二 )


src/sys/kern/bus_if.m
src/sys/kern/device_if.m建立一個類
使用Kobj的第二步是建立一個類 。一個類的組有名字、方法表;假如使用了Kobj的“對象管理工具(Object Handling FacilitIEs),類中還包含對象的大小 。建立類時使用宏DEFINE_CLASS() 。建立方法表時,須建立一個kobj_method_t數(shù)組,用NULL項結(jié)尾 。每個非NULL項可用宏KOBJMETHOD()建立 。例如:
DEFINE_CLASS(fooclass, foomethods, sizeof(struct foodata));
kobj_method_t foomethods[] = {
KOBJMETHOD(bar_doo, foo_doo),
KOBJMETHOD(bar_foo, foo_foo),
{ NULL, NULL}
};類須被“編譯 。根據(jù)該類被初始化時系統(tǒng)的狀態(tài),將要用到一個靜態(tài)分配的緩存和“操作數(shù)表(ops table,譯者注:即“參數(shù)表) 。這些操作可通過聲明一個結(jié)構(gòu)體struct kobj_ops并使用kobj_class_compile_static(),或是只使用kobj_class_compile()來完成 。
建立一個對象
使用Kobj的第三步是定義對象 。Kobj對象建立程序假定Kobj專有數(shù)據(jù)在一個對象的頭部 。如果不是如此,應(yīng)當(dāng)先自行分配對象,再使用kobj_init()初始化對象中的Kobj專有數(shù)據(jù);其實可以使用kobj_create()分配對象,并自動初始化對象中的Kobj專有內(nèi)容 。kobj_init()也可以用來改變一個對象所使用的類 。將Kobj的數(shù)據(jù)集成到對象中要使用宏KOBJ_FIELDS 。例如:
struct foo_data {
KOBJ_FIELDS;
foo_foo;
foo_bar;
};調(diào)用方法
使用Kobj的最后一部就是通過生成的函數(shù)調(diào)用對象類中的方法 。調(diào)用時,接口名與方法名用'_'接合,而且全部使用大寫字母 。例如,接口名為foo,方法為bar,調(diào)用就是: [返回值 = ] FOO_BAR(對象 [, 其它參數(shù)]);
當(dāng)一個用kobj_create()不再需要被使用時,可對這個對象調(diào)用kobj_delete() 。當(dāng)一個類不再需要被使用時,可對這個類調(diào)用kobj_class_free() 。

推薦閱讀