| 论坛登陆 注册 | 教程 笑话 影视 投稿 |
![]() |
|
||||||||||||||||||||||||||||||||||||||||
FreeBSD系统内核对象 |
|
| www.xker.com 作者: 来源:网络转载 加入日期:2006-2-23 8:00:01 | |
如何使用Kobj 结构 struct kobj_method 函数 void kobj_class_compile(kobj_class_t cls); void kobj_class_compile_static(kobj_class_t cls, kobj_ops_t ops); void kobj_class_free(kobj_class_t cls); kobj_t kobj_create(kobj_class_t cls, struct malloc_type *mtype, int mflags); void kobj_init(kobj_t obj, kobj_class_t cls); void kobj_delete(kobj_t obj, struct malloc_type *mtype); 宏 KOBJ_CLASS_FIELDS KOBJ_FIELDS DEFINE_CLASS(name, methods, size) KOBJMETHOD(NAME, FUNC) 头文件 <SYS param.h>lt;SYS kobj.h> 建立一个接口的模板 使用Kobj的第一步是建立一个接口。建立接口包括建立模板的工作。建立模板可用脚本src/sys/kern/makeobjops.pl完成,它会产生申明方法的头文件和代码,脚本还会生成方法查找函数。 在这个模板中如下关键词会被使用: #include, INTERFACE, CODE, METHOD, STATICMETHOD, 和 DEFAULT. #include语句的整行内容将被一字不差的复制到被生成的代码文件的头部。 例如: #include 关键词INTERFACE用来定义接口名。这个名字将与每个方法名接合在一起,形成 [interface name]_[method name]。语法是:INTERFACE [接口名]; 例如: INTERFACE foo; 关键词CODE会将它的参数一字不差的复制到代码文件中。语法是CODE { [任何代码] }; 例如: CODE { struct foo * foo_alloc_null(struct bar *) { return NULL; } }; 关键词METHOD用来描述一个方法。语法是: METHOD [返回值类型] [方法名] { [对象 [, 参数若干]] }; 例如: METHOD int bar { struct object *; struct foo *; struct bar; }; 关键词DEFAULT跟在关键词METHOD之后,是对关键词METHOD的补充。它给这个方法补充上缺省函数。语法是: METHOD [返回值类型] [方法名] { [对象; [其它参数]] }DEFAULT [缺省函数]; 例如: METHOD int bar { struct object *; struct foo *; int bar; } DEFAULT foo_hack; 关键词STATICMETHOD类似关键词METHOD。对于每个Kobj对象,一般其头部都有一些Kobj专有的数据。METHOD定义的方法就假设这些专有数据位于对象头部;假如对象头部没有这些专有数据,这些方法对这个对象的访问就可能出错。而STATICMETHOD定义的对象可以不受这个限制:这样描述出的方法,其操作的数据不由这个类的某个对象实例给出,而是全都由调用这个方法时的操作数(译者注:即参数)给出。这也对于在某个类的方法表之外调用这个方法有用。//小新技术网 xker.com 其它完整的例子: src/sys/kern/bus_if.m src/sys/kern/device_if.m 建立一个类 使用Kobj的第二步是建立一个类。一个类的组有名字、方法表;假如使用了Kobj的“对象管理工具”(Object Handling Facilities),类中还包含对象的大小。建立类时使用宏DEFINE_CLASS()。建立方法表时,须建立一个kobj_method_t数组,用NULL项结尾。每个非NULL项可用宏KOBJMETHOD()建立。 例如: 本新闻共2页,当前在第1页 1 2 编辑:xker.com上一篇:freebsd硬盘安装 下一篇:没有了 |
||
| 【关闭窗口】【浏览次数:】【收藏此页】 |
| 相关文章 | |||||||||||
|
| 评论 | |
设为首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| Copyright © 2003-2006 xker.com All rights reserved. 网站合作、广告联系QQ:12231446 |
| 小新技术网 冀ICP备05002857号 |