티스토리 뷰
사실 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 |