文字MUD游戏论坛-天下泥潭群英会-水泊梁山  

返回   文字MUD游戏论坛-天下泥潭群英会-水泊梁山 > 西游之旅 > 『 巫师天下 』

『 巫师天下 』 学习如何挂MUD,如何制作MUD。讨论如何管理好一个MUD,做好一个巫师。

发表新主题 回复
 
LinkBack 主题工具 主题评分 显示模式
旧 2011-12-03   #1
高级会员
级别:6 | 在线时长:109小时 | 升级还需:31小时级别:6 | 在线时长:109小时 | 升级还需:31小时级别:6 | 在线时长:109小时 | 升级还需:31小时
 
Odysseus 的头像
 
注册: 08年04月11日
来自: 盘丝洞
帖子: 311
声望力: 20
声望: 50 Odysseus 初领妙道
现金:29两梁山币
资产:1245两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0
重载efun

发信人: cloner (!!!!!!!), 信区: Mud_Builder
标 题: 重载efun
发信站: 一塌糊涂 BBS (Sat May 5 03:27:36 2001)

【 在 shure (韩姝儿) 的大作中提到: 】
: exec()这个函式的权力非常大, 不当地使用会危及 MUD 的
: 系统安全. 正确地限制使用此函式的方法是另外写一个同名的
: 模拟超越函式 (simulated emulated function, simul_efun)
: , 并使用 valid_override(4) 来限制此一模拟超越函式的使
: 用. (意即 efun::exec() )
shure这段话好像宝岛那边的话啊,呵呵。
我解释一下吧,我估计新手不容易看明白,:P

嗯,打算灌点水了:

mud里有efun和simul_efun的概念,efun就是所谓的超越函数,
其实就是mudos提供直接使用的函数。
simul_efun就是在mudlib里自己写的一套可以在整个lib
里使用的函数,对一般的ob来说,和efun没有什么区别。

而重载,就是在 lib里写的与efun同名的函数,(这个并不是非要
写在simul_efun_ob里不可的。)
而且还可以继续用父类的函数 ,这里就写成:
efun::exec()...很好用的一个功能,使得我们写lib的时候
更加灵活。不过mudos并不允许在lib里随便重载efun,
事实上是不让随便得使用efun::的方法调用。
对于重载合法性的检查在master.c得valid_override()里
进行,一般只会允许特定的文件重载特定的efun。

重载efun得目的,一个是做增强,比如重载destruct()。
你可以在destruct()之前作协需要的处理。

另一个就是为了安全。比如exec(),shutdown(),重载
就可以作些权限判断了,比如只允许root_uid调用这样
的efun等等。

这套机制有点复杂,不过也挺有效,就是重载太多的
efun也是挺麻烦的事情,:P。很多lib就没有重载
shutdown,exec什么的。bind有专门的valid_bind()
就省事了,呵呵。
Odysseus 当前离线  
回复时引用此帖

发表新主题 回复

添加到书签


发帖规则
不可以发表主师
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子

论坛启用 vB 代码
论坛启用 表情图标
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为格林尼治时间 +9, 现在的时间是 10:51.


Powered by SPLS
版权所有 2001-2023 水泊梁山
皖ICP备05012024号

站长 fengyue

Content Relevant URLs by vBSEO 3.6.1