NS:嵌入的Tcl

~ns/tcl/目录下存放着 NS 各种构件的 Otcl 代码以及很多初始配置脚本。NS刚一开始运行,这些 Otcl 脚本所定义的类、过程和变量就都是有效的了。 NS 实际上是通过EmbeddedTcl 类将一些初始 Otcl 脚本载入 NS 的。

      EmbeddedTcl 类是在~tclcl/tclcl.h 和~tclcl/Tcl.cc 中定义的。

      tclcl.h 中EmbeddedTcl 的类声明:

class EmbeddedTcl {

public:

inline EmbeddedTcl(const char* code) { code_ = code; }

void load();

int load(Tcl_Interp*    interp);

const char* get_code() { return code_; }

private:

const char* code_;

};

      除了构造函数之外就只有一个load()函数,很简单。再看看Tcl.cc 文件中load() 的定义:

void EmbeddenTCL::load() {

Tcl::instance.evalc (code_);

}

      也简单,就是将构造函数中传入的code_ 字符串作为Otcl 命令执行了。

      所以,类EmbeddedTcl 的作用就用来存储和执行一段Otcl 脚本。

     ~ns/gen/ns_tcl.cc 中使用了EmbeddedTcl类。ns_tcl.cc 是在编译NS 的过程中自动生成的,它可以将tcl/lib/ns-lib.tcl 中所声明的所有Tcl脚本通过EmbeddedTcl 对象封装,以便在NS 开始运行时载入。

     所以,想要扩展NS 的Otcl 脚本,只把它放在~ns/tcl/目录是不够的,需要加一条source 命令在tcl/lib/ns_lib.tcl 中,以便在用Tcl_expand.tcl 扩展ns_lib.tcl 的时候能够将该脚本的内容包含进去。然后还需要重新编译NS,以便重新生成ns_tcl.cc。

     一定要确保编译过程中重新生成gen/ns_tcl.cc,不如Tcl 脚本的改动就不会起作用了。最好先手动删除gen/ns_tcl.cc,这样就肯定不会出差错了。

     ps:和ns_tcl.cc 相似的还有gen/ptypes.cc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值