Tcl -1记录分段故障核心转储

Tcl -1记录分段故障核心转储,tcl,helper,ns2,Tcl,Helper,Ns2,我正在尝试使用NS-2中的应用程序/流量/跟踪传输视频帧的二进制文件帧,从节点1传输到节点2,这给了我错误,分段错误。TCL脚本如下所示: set ns [new Simulator] set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] set n4 [$ns node] set n5 [$ns node] set f [open aj/star.tr w] $ns trace-all $f set

我正在尝试使用NS-2中的应用程序/流量/跟踪传输视频帧的二进制文件帧,从节点1传输到节点2,这给了我错误,分段错误。TCL脚本如下所示:

set ns [new Simulator]

set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]
set n5 [$ns node]


set f [open aj/star.tr w]
$ns trace-all $f
set nf [open aj/star.nam w]
$ns namtrace-all $nf


$ns duplex-link $n0 $n1 1.5Mb 10ms DropTail
$ns duplex-link $n0 $n2 10Mb 5ms DropTail
$ns duplex-link $n0 $n3 10Mb 5ms DropTail
$ns duplex-link $n0 $n4 10Mb 5ms DropTail
$ns duplex-link $n0 $n5 10Mb 5ms DropTail


set tfile [new Tracefile]
$tfile filename starwars

set original_file_name csencoding.binary
set trace_file_name video.dat
set original_file_id [open $original_file_name r]
set trace_file_id [open $trace_file_name wb]
set s4 [new Agent/UDP]
$ns attach-agent $n4 $s4

set null1 [new Agent/Null]
$ns attach-agent $n1 $null1

$ns connect $s4 $null1

set trace [new Application/Traffic/Trace]
$trace attach-tracefile $tfile

$trace attach-agent $s4



$ns at 1.0 "$trace start"

$ns at 110.0 "$trace stop"

$ns at 120.0 "finish"

proc finish {} {

         global ns nf f
         $ns flush-trace
         close $f
         close $nf
  exec nam aj/star.nam &
         exit 0

}

$ns run
二进制文件:

1000110 1101111 1110010 1100101 1101101 1100001 1101110 1010001 1000011 1001001 1000110 0101110 0110000 0110000 0110000 0101110 1110000 1100111 1101101 1011111 1000011 1010011 1000100 1100001 1110100 1100001 0101110 1100100 1100001 1110100

二进制字符串到文本 您需要以文本形式获取文件名,或者在尝试打开文件之前将csencoding.binary转换为文本。它没能打开1000110。。。文件名的表示形式。这是一个可以将7位二进制文件转换为文本的程序

#!/usr/bin/tclsh

set bin "1000110 1101111 1110010 1100101 1101101 1100001 1101110 1010001 1000011 1001001 1000110 0101110 0110000 0110000 0110000 0101110 1110000 1100111 1101101 1011111 1000011 1010011 1000100 1100001 1110100 1100001 0101110 1100100 1100001 1110100"

proc bin7str {bin} {
        set str ""
        foreach {el} $bin {
                append str [binary format B* "0${el}"]
        }
        return $str
}

puts [bin7str $bin]
输出:

./bin.tcl
ForemanQCIF.000.pgm_CSData.dat

你忘了问问题了。按钮被标记为“出于某种原因提出问题”。您可能希望更改标签;helper在这里似乎不是一个有用的标记。可能是tcl?二进制数据是文件名ForemanQCIF.000.pgm_CSData.dat。我怀疑set original_file_id[打开$original_file_name r]应该打开ForemanQCIF.000.pgm_CSData.dat。再想一想,我没有看到打开文件后使用$original_file_id。它看起来像是未使用的,除非有一个upvar或upleveling来获取它。