티스토리 뷰

C++

[C++] zlib gzip 관련 함수

xaida 2018. 1. 12. 17:05

사실 C라이브러리

compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);

=> *source를 sourceLen만큼 압축을 해서, *dest 버퍼로 복사합니다.

=> *destLen은 dest버퍼의 총 크기이며, sourceLen보다 최소 0.1%는 크게 잡아야하고.

=> 압축을 실시해도 크기가 증가되는 경우가 있습니다.

(성공했을 때 Z_OK 반환메모리 부족 Z_MEM_ERROR 반환버퍼의 크기 부족 Z_BUF_ERROR 반환)

 

compress2(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level);

=> level을 빼면 compress와 100% 동일한 함수이지만여기서 level의 기능은 압축률을 정해준다.

=> 0~9까지 값이 있으며숫자가 클수록 압축률이 좋아지고 속도가 느려집니다..

 

uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);

=> compress가 압축을 하는 함수이며앞에 un을 붙여주므로써 압축을 해제하는 함수입니다.

(성공했을 때 Z_OK 반환메모리 부족 Z_MEM_ERROR, 버퍼 크기 부족 Z_BUF_ERROR 반환압축데이터 문제 Z_DATA_ERROR 반환)

 

gzopen(const char *path, const char *mode);

=> *path의 경로의 데이터를 열어서, *mode인자 “rb”: 읽기, “wb”: 쓰기 등이 사용됩니다.

=> 압축 포맷된 파일이 아니라도 상관없다성공적으로 파일을 열었을 때 gzFile를 리턴합니다.

=> 파일 열기에 실패하면 NULL 리턴

 

gzdopen(int fd, const char *mode);

=> gzopen과 동일하지만, gzdopen은 파일 지정자가 들어갑니다. (시스템 콜을 사용합니다.)

 

gzsetparams(gzFile file, int level, int strategy);

=> level은 압축률을 지정하기 위해 사용되며, strategy는 압축 정책을 지정하는데 사용됩니다.

=> 압축 정책은 Z_DEFAULT_STRATEGY 와 Z_HUFFMAN_ONLY 중 하나를 선택할 수 있습니다.

=> 성공했을 경우 Z_OK, 실패했을 경우 Z_STREAM_ERROR을 리턴한다.

 

gzread(gzFile file, voidp buf, unsigned len);

=> 압축파일 스트림 file을 len크기만큼 읽어서 압축을 풀어 buf에 저장

=> 만약 gzip포맷이 아닐 경우 데이터복사만 합니다.

=> 성공했을 경우 압축 풀린 데이터의 크기를 반환파일의 끝일 경우 0, 그 밖의 에러는 1을 리턴합니다.

 

gzwrite(gzFile file, const voidp buf, unsigned len);

=> buf에서 len크기만큼 데이터를 읽어서 압축한 후 file에 저장합니다.

=> 성공했을 경우 원본 데이터 크기 반환실패했을 경우 0이 반환됩니다.

 

VAgzprintf(gzFile file, const char *format, ...);

=> C언어 파일입출력 함수에서 fprintf 함수의 압축 버전입니다.

 

gzputs(gzFile file, const char *s);

=> NULL이 제거된 문자열을 입력받아 압축합니다.

=> 성공했을 경우 문자열의 크기실패했을 경우 1을 반환됩니다.

 

gzgets(gzFile file, char *buf, int len);

=> 파일입출력 함수에서 fgets 함수의 압축 버전입니다.

 

gzputc(gzFile file, int c);

=> 문자를 unsigned char로 변경 후 file로 저장합니다

 

gzgetc(gzFile file);

=> 압축파일에서 1바이트씩 읽어옵니다.

 

gzflush(gzFile file, int flush);

=> 출력 대기중인 모든 데이터를 파일에 저장합니다.

 

gzseek(gzFile file, z_off_t offset, int whence);

=> lseek와 동일한 함수입니다커서의 위치를 지정해주는 함수입니다.

 

gzrewind(gzFile file);

=> 파일을 맨처음으로 되돌립니다읽기모드로 열었을 때만 사용가능합니다.

=> gzseek(file, 0L, SEEK_SET)와 동일합니다.

 

gzeof(gzFile file);

=> 파일의 끝일 경우 1을 반환합니다끝이 아닐 경우 0을 반환합니다.

 

gzclose(gzFile file);

=> 파일을 종료할 때 사용합니다프로그램이 종료될 때 반드시 실행해야 메모리사용한 것이

=> 반환됩니다.

 

gzerror(gzFile file, int *errnum);

=> 마지막에 발생한 에러에 관한 메시지를 반환합니다.

 

zlibVersion(void);

=> zlib버전을 확인할 때 사용합니다.

'C++' 카테고리의 다른 글

minidump  (0) 2018.02.26
[C++] getline 함수에 대해서.  (0) 2017.12.07
[C++] OpenSSL을 이용한 간단한 echo 프로그래밍  (0) 2017.11.27
[C++] OpenSSL SSL_CTX관련  (0) 2017.11.27
[C++] IP주소 및 포트 정보관련 시스템 함수  (0) 2017.11.27
공지사항
최근에 올라온 글
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30