免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1054 | 回复: 0
打印 上一主题 下一主题

NS学习 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-13 20:44 |只看该作者 |倒序浏览

NS学习                                       
NS学习笔记
1、tcl只支持一种数据结构:字符串(string)。所有的命令、命令的所有参数、命令的结果、所有的变量都是字符串。
基本语法为:
command arg1 arg2 arg3...
2、# 是注释符号
3、tcl中通过空白字符分段表示不同的字符串,而使用花括号或双引号来把多个字符串组合在一起形成一个字符串。
两种组合的区别仅仅在于双引号内允许进行替代,而花括号内不会进行替代。
example:
set str "hello world"
puts "the length of str is [string length $str]"
结果是:
the length of str is 11
puts {the length of str is [string length $str]}
结果是:
the length of str is [string length $str]
4、注意 if、elseif、else 语句的格式
举例:
正确的形式是:
if {condition} {
command1
} elseif {
command2
} else {
command3
}
if、elseif、else 与两边的括号要有空格,而且不能写成如下格式:
错误格式:
if {condition}
{
command1
}
elseif
{
command2
}
else
{
command3
}
错误格式:
if {condition}
{
command1
}
elseif {
command2
}
else {
command3
}
5、过程定义
proc name params body
举例:
proc variousParams {a {b foo} args} {
foreach param {a b args} {
  puts "$param = [set $param]"
}
}
variousParam 是过程名字
a、b 是过程的参数,其中 b 有默认参数。如果一个参数设定了默认参数,那么它后面的参数都必须设定默认参数
args 是一个关键字 说明过程使用了可变参数,args必须作为最后一个参数
OTcl--面向对象的Tcl
1、成员变量和成员函数的定义
在OTcl中,类的定义并不像C++那样在一对 {} 中完成一个明显清楚的定义,而是写成多个分开的部分,每一个方法的定义给类增加一个成员函数。
OTcl中成员变量并不是预先定义才在成员函数中使用,而是在成员函数中定义。
在OTcl中定义方法采用关键字 instproc ,定义成员变量采用关键字 instvar。
变量 $self 相当于 C++中的this
2、子类的构造函数不会自动调用父类的构造函数,需要显式调用:eval $self next $args
分裂对象模型和TclCL
1、想要扩展NS的Otcl脚本,只把它放在 ~ns/tcl/目录下是不够的,需要加一条source命令在 tcl/lib/ns-lib.tcl 中,以便在用 tcl-expand.tcl
扩展 ns-lib.tcl 的时候能够将该脚本的内容包含进去。然后重新编译NS才会起作用,因为NS载入的其实是 ns_tcl.cc 中的code字符串。这里还需要
特别提醒的是,一定要确保编译过程中重新生成了 gen/ns_tcl.cc, 不然对Tcl脚本的改动就不会起作用。最好先手动删除 gen/ns_tcl.cc
2、所有的 C++ 类都是从类 TclObject 一级级继承出来的,而所有的 Otcl 类都是从 SplitObject 一级级继承出来的
3、通过 TclObject 和 TclClass 两个 C++ 类来实现 Otcl 类和 C++ 类的关联。类 TclObject 是所有编译类的基类,对应的 SplitObject 是所有
解释类的基类。每个编译对象都是当用户从解释器中创建解释对象的同时在 C++ 类结构中产生出的影像对象。而类 TclClass 则包含了执行这些映像的机制。
4、源文件参考:
(1)NS的事件调度机制:~ns/tcl/lib/ns-lib.tcl, ~ns/common/scheduler.{cc,h}, ~ns/common/heap.h
(2)节点(Node):~ns/tcl/lib/ns-lib.tcl, ~ns/tcl/lib/ns-node.tcl, ~ns/classifier/classifier.{cc,h}, ~ns/classifier-addr.cc, ~ns/classifier/classifier-port.cc, ~ns/mcast/replicator.cc
(3)链路(Link): ~ns/tcl/lib/ns-lib.tcl, ~ns/tcl/lib/ns-link.tcl, ~ns/link/delay.{cc,h}, ~ns/common/ttl.cc, ~ns/common/connector.{cc,h}
(4)定时器(timer): ~ns/tcl/mcast/timer.tcl, ~ns/timer-handler.{cc,h}
如何添加分组头:
假设要增加一个叫 newhdr 的新的分组头,
1、在 C++ 中创建一个新的 structure 来定义所需要的字段,按照命名惯例,这个 structure 应该叫做 hdr_newhdr,定义 offset_ 字段和访问改字段的方法;
2、定义所需要访问其他字段的成员函数;
3、创建一个 static 类来完成 Otcl 连接(按照命名惯例,这个 static 类应该叫做 PacketHeader/Newhdr),在它的构造函数里进行 bind_offset();
4、编辑~ns/tcl/lib/ns-packet.tcl 来激活新的分组头。
如何新增模块到ns2的核心步骤如下:
1.准备好模块文件(例如,a.cc 和 a.h)。
2.若有需要做初始设定的话,修改ns-default.tcl。
3.修改Makefile(把a.o加到OBJ_CC内)
4.重新编译
5.测试模块
In NS, the output queue of a node is implemented as a part of a link, therefore users should specify the queue-type when creating links.
在NS中,节点的出口队列是作为链路的一部分来实现的,因此创建链路的时候需要确定队列的类型。
绘图工具gnuplot 学习
1、gnuplot 是一个命令驱动的交互式画图软件。有两种工作方式:命令行交互式,批处理方式(文件)。直接输入 gnuplot 进入交互式,用 gnuplot 'filename' 进入批处理方式。
gnuplot; load 'filename' 与 gnuplot 'filename' 具有相同的作用,都是执行filename中的语句来画图。
2、简单绘制函数: plot [0:10] sin(x) #画出sin(x)的曲线,x的范围[0,10]
splot是绘制三维曲面的。
3、运算符 ** 代表乘方
4、假设有数据文件 result.tr,如下:
0.1 0.01 -2.303
0.2 0.04 -1.609
0.5 0.25 -0.593
1 1 0
2 4 0.693
3 9 1.099
4 16 1.386
5 25 1.609
6 36 1.792
7 49 1.946
8 64 2.078
9 81 2.197
plot 'result.tr' #表示以数据的第一列为x轴,第二列位y轴绘制曲线,注意文件名要加单引号或者双引号
plot 'result.tr' using 2:3 #表示以数据的第二列为x轴,第三列位y轴绘制曲线
5、常用的 with 选项
plot 'result.tr' with linespoints pointsize 3 pointtype 1
其中linespoints 可以简写为 linesp, pointsize 简写为 ps, pointtype 简写为 pt
输入 test 命令可以显示所有的线性,点的类型,等等。
6、只要使用一条 plot 命令,在要绘制的不同图之间用逗号 ',' 隔开,就可以将多条曲线绘制在一起。
plot 'result.tr' using 1:($2+$3) title 'data' with linesp, x**2
7、图形显示设置
设置标题:set title 'title_of_graph'
设置标签:set xlabel 'xlabel_name'
         set ylabel 'ylabel_name'
设置横、纵坐标的范围:set xrange [0:100] #x的范围是0-100
                   set yrange [0:100] #y的范围是0-100
设置坐标刻度:
set xtics 0,0.5,10 #x坐标获得0、0.5、1、1.5、2、2.5......10这样的刻度
set xtics (0,1,2,5,10,20) #x坐标只标出0,1,2,5,10,20这些值
set xtics ('low' 0, 'medium' 50, 'high' 100) #x坐标在0处标出low,在50处标出medium,在100处标出high
set ytics ... 用来设置y坐标刻度
8、重定向到图形文件
set terminal png medium
set output 'plot.png'
plot 'filename' w lp


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/35664/showart_339620.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP