2013-02-27 1 views
1

무비 파일 추적을 사용하여 ns-2의 응용 프로그램 에이전트가 사용하는 이진 파일로 변환하는 tcl 스크립트를 사용하고 있습니다. 여기에 바이너리 파일로 동영상 파일 추적을 변환하는 스크립트의 코드입니다 :video.dat에서 ns-2의 파일 크기가 잘못되었습니다.

set original_file_name Verbose_Silence_of_the_Lambs_VBR_H263.dat 
set trace_file_name video.dat 
set original_file_id [open $original_file_name r] 
set trace_file_id [open $trace_file_name w] 
set last_time 0 
while {[eof $original_file_id] == 0} { 
    gets $original_file_id current_line 
    if {[string length $current_line] == 0 || 
    [string compare [string index $current_line 0] "#"] == 0} { 
     continue 
    } 

    scan $current_line "%d%s%d" next_time type length 
    set time [expr 1000*($next_time-$last_time)] 
    set last_time $next_time 
    puts -nonewline $trace_file_id [binary format "II" $time $length] 
} 
close $original_file_id 
close $trace_file_id 

는하지만 사용할 때이 더 응용 프로그램 에이전트가 사용하는 트래픽 생성을위한 파일 video.dat 만들어 나는 다음과 같은 오류가 발생했습니다 :

Bad file siz in video.dat 
Segmenatation fault 

이 약점을 가지고 있습니다. 코드에서 이진 형식 "II"의 의미는 무엇입니까? 내가 tcl-binary (n) 문서에 언급되어 있지 않거나 오래되어 현재 지원되지 않는다는 것을 발견하지 못했기 때문입니다.

+0

결국 나는 그것을했습니다. 실제로 ns-2 Application/Traffic/Trace에 대한 추적 파일의 레코드에는 네트워크 바이트 순서로 2 개의 32 비트 정수가 포함됩니다. 첫 번째 정수는 마이크로 초 단위의 시간을 제공하고 두 번째 정수는 패킷 크기를 바이트 단위로 나타냅니다. tcl 스크립트 바이너리 형식 "II"는 이것을 읽음으로써이 형식으로 변환 할 수 없습니다. 그래서 저는 C 프로그램을 작성하고 필요한 바이너리 형식의 동영상 파일 추적을 변환 한 다음 ns-2 시뮬레이션에 사용하여 효과를 보았습니다. 자세한 설명은 – user976754

답변

1

아마도 이진 모드에서 파일을 열지 않는 것이 문제 일 수 있습니다.

변경

set trace_file_id [open $trace_file_name w] 

set trace_file_id [open $trace_file_name wb] 

그렇지 Tcl의 출력을 변경한다, 예를 들어 windows에서 \n\r\n으로 바꿉니다. (바이트 값이 127 이상이면 유니 코드 코드 포인트로 처리 된 다음 시스템 인코딩으로 변환되어 전체 바이너리 내용이 엉망이됩니다.) 텍스트 파일에는 문제가 없지만 바이너리 파일에는 문제가 발생합니다. 다행히 단 하나의 문자가 그 문제를 해결하는 데 필요한

: b open

편집에 대한 수정 등이 : 난 그냥 티클의 change list에서보고, 개방에 대한 b 수정은 8.5에 추가되었습니다.

fconfigure $trace_file_id -translation binary 

b 수정은이 단지 바로 가기입니다 : 당신은 Tcl의 이전 버전을 사용하는 경우, 그래서 나는 보통 오픈 후 다음 줄을 추가, 8.5 또는 8.6 사용합니다.

+0

+1입니다. –

관련 문제