2017-12-19 3 views
-1

필자가 작성한 프로그램이 gzip 헤더를 올바르게 구문 분석하고 FEXTRA, FNAME 및 FCOMMENT 필드를 읽는 지 테스트해야합니다. 그러나 gzip은 FEXTRA 및 FCOMMENT 필드 (FNAME 만 사용)로 아카이브를 만드는 것을 지원하지 않습니다. 이 세 가지를 모두 수행 할 수있는 기존 도구가 있습니까?FEXTRA 및 FCOMMENT 필드를 사용하여 gzip 파일을 만드는 방법

+0

스택 오버플로는 프로그래밍 및 개발 관련 질문에 대한 사이트입니다. 이 질문은 프로그래밍이나 개발이 아니기 때문에 주제와는 거리가 먼 것처럼 보입니다. 도움말 센터에서 [여기에서 내가 질문 할 수있는 항목은 무엇입니까?] (http://stackoverflow.com/help/on-topic)를 참조하십시오. 아마도 [Super User] (http://superuser.com/) 나 [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/)가 더 나은 곳이 될 것입니다. – jww

+1

Crypto ++ 라이브러리는 [Gzip 클래스] (https://www.cryptopp.com/wiki/Gzip)의 세 필드를 모두 사용합니다. [Super User] (http://superuser.com/)에서 [Gzip은 압축 해제시 원본 파일명을 존중합니까?] (https://superuser.com/q/859785/173513)도 참조하십시오. 많은 (대부분?) 도구는 문자 집합과 관련된 문제로 인해 기본적으로 파일 이름을 따르지 않습니다. – jww

+0

@jww 설명을 다시 읽으십시오. Gzip은 FNAME 필드 설정 만 지원합니다. 필자가 작성한 프로그램도 FEXTRA 및 FCOMMENT 필드를 구문 분석해야하지만이 필드가있는 gzip으로 테스트 파일을 만들 수없는 경우에는이 필드를 테스트 할 수 없습니다. [RFC 참조] (http://www.zlib.org/rfc-gzip.html#specification) – mmstick

답변

2

펄 모듈 IO::Compress::Gzip 선택적으로 당신이에 intrested하는하는 세 개의 필드를 설정할 수 있습니다. 다음은

FNAME을 "설정 몇 가지 예제 코드입니다 (공정 공시 내가 모듈의 저자) 파일 이름 ", FCOMMENT을"This is a comment "로 변경하고 ID가"ab "이고 값이"cde "인 단일 하위 필드가있는 FEXTRA 필드를 만듭니다.

use IO::Compress::Gzip qw(gzip $GzipError); 

gzip \"payload" => "/tmp/test.gz", 
    Name  => "filename", 
    Comment => "This is a comment", 
    ExtraField => [ "ab" => "cde"] 
    or die "Cannot create gzip file: $GzipError" ; 

여기에 만든 파일의 16 진수 덤프가 있습니다.

00000000 1f 8b 08 1c cb 3b 3a 5a 00 03 07 00 61 62 03 00 |.....;:Z....ab..| 
00000010 63 64 65 66 69 6c 65 6e 61 6d 65 00 54 68 69 73 |cdefilename.This| 
00000020 20 69 73 20 61 20 63 6f 6d 6d 65 6e 74 00 2b 48 | is a comment.+H| 
00000030 ac cc c9 4f 4c 01 00 15 6a 2c 42 07 00 00 00  |...OL...j,B....| 
0000003f 
+0

이 기능을 지원하는 실제 유틸리티 (예 : gzip)가 있으면 좋을 것입니다. 안타깝게도 대신 ghex에서 생성 된 gzip 파일을 열고 통합 테스트를 만들기 위해 16 진수 데이터를 직접 수정해야했습니다. 그럼에도 불구하고 C/Rust 프로그램이이 헤더를 올바르게 읽습니다. – mmstick

관련 문제