ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
HTMLº¯È¯ ¹®¼
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
<article lang="ko">
<!-- -->
<!-- ¹®¼ Á¤º¸ -->
<!-- -->
<articleinfo>
<title>Zlib Ȱ¿ë</title>
<author>
<surname>À± »ó¹è</surname>
<affiliation>
<address>
<email>dreamyun@yahoo.co.kr</email>
</address>
</affiliation>
</author>
<revhistory>
<revision>
<revnumber>0.8</revnumber>
<date>2003³â 10¿ù 2ÀÏ 23½Ã</date>
<revremark>ÃÖÃÊ ¹®¼ÀÛ¼º</revremark>
</revision>
</revhistory>
</articleinfo>
<!-- -->
<!-- ¼½¼Ç ½ÃÀÛ -->
<!-- -->
<section>
<title>¼Ò°³</title>
<para>
PC¿Í ÀÎÅͳÝÀÇ º¸±ÞÀ¸·Î µ¥ÀÌÅÍÀÇ ¾çÀÌ ±ÞÁõÇϰí ÀÖ´Ù. ±×·¯´Ù º¸´Ï
µ¥ÀÌÅÍ ÀúÀå°ø°£¿¡ ¸¹Àº ¾Ð¹ÚÀ» ¹Þ°Ô µÈ´Ù. °Å±â¿¡ ´õºÒ¾î ÀÎÅͳÝÀÌ
´ëÁßÈ µÇ¸é¼ µ¥ÀÌÅ͸¦ Àü¼ÛÇϱâ À§ÇÑ ³×Æ®¿öÅ©ÀÚ¿ø¿¡ÀÇ ¾Ð¹Úµµ
¹Þ°Ô µÇ¾ú´Ù.
</para>
<para>
ÀÌ·± ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ °³¹ßµÈ°Ô µ¥ÀÌÅÍ ¾ÐÃà±â¼úÀ̸ç, Zlib´Â
¹ü¿ëÀûÀÎ µ¥ÀÌÅÍÀÇ ¾ÐÃàÀ» À§ÇÑ ¸ñÀûÀ¸·Î °³¹ßµÇ¾ú´Ù. ÀÌ ¹®¼´Â
Zlib¸¦ ¼³¸íÇϱâ À§ÇÑ ¸ñÀûÀ¸·Î ÀÛ¼ºµÇ¾úÀ¸¸ç, ·¹ÆÛ·±½º ¿ëµµ·Î½á
À¯¿ëÇÏ°Ô »ç¿ë°¡´É ÇÒ°ÍÀÌ´Ù. ¶ÇÇÑ ¹®¼ÀÇ ¸¶Áö¸·¿¡ °£´ÜÇÑ È°¿ë¿¹Á¦¸¦
µÒÀ¸·Î½á Á»´õ ½±°Ô ÀÌÇØÇϵµ·Ï ¹è·ÁÇϰí ÀÖ´Ù.
</para>
<para>
ÀÌ ¹®¼ÀÇ ¸¹Àº ³»¿ëµéÀº <ulink url=http://www.gzip.org/zlib/manual.html>Zlib·¹ÆÛ·±½º ¸Þ´º¾ó</ulink>À»
Âü°í Çϰí ÀÖ´Ù.
</para>
</section>
<section>
<title>Zlib¸¦ ÀÌ¿ëÇÑ ¾ÐÃà ÇÁ·Î±×·¡¹Ö</title>
<para>
À̹øÀå¿¡¼´Â Zlib¿¡ ´ëÇÑ °³·«ÀûÀÎ ¼Ò°³¿Í ÇÔ²² Zlib¿¡¼
Á¦°øÇÏ´Â °¢Á¾ ÇÔ¼ö¿¡ ´ëÇØ¼ ´Ù·ç°Ô µÈ´Ù. ±×·¯³ª ¸ðµç ÇÔ¼öµé¿¡ ´ëÇØ¼´Â
´Ù·çÁö ¾Ê°í ÇÁ·Î±×·¡¹Ö Çϴµ¥ ÇÊ¿äÇÑ Çʼö ÇÔ¼öµé¸¸À» ´Ù·ê °ÍÀÌ´Ù. À̿ܿ¡µµ
zlib¿¡¼ Á¦°øµÇ´Â ÇÔ¼öµéÀÌ Àִµ¥, ÀϹÝÀûÀÎ ÀÀ¿ë ¾ÖÇø®ÄÉÀ̼ÇÀÇ
Á¦ÀÛ¿¡´Â °ÅÀÇ »ç¿ëµÇÁö ¾Ê´Â ÇÔ¼öµéÀÌ´Ù. À̵é ÇÔ¼öµé¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº
<ulink url=http://www.gzip.org/zlib/manual.html>Zlib·¹ÆÛ·±½º ¸Þ´º¾ó</ulink>¸¦ Âü°íÇϱ⠹ٶõ´Ù.
</para>
<para>
Áö±ÝÀº ´ÜÁö ÀÚÁÖ »ç¿ëµÇ´Â À¯Æ¿¸®Æ¼ ÇÔ¼öµé¸¸ ¼³¸íÇϰí Àִµ¥,
½Ã°£ÀÌ µÈ´Ù¸é zlib¿¡¼ Á¦°øÇÏ´Â ´Ù¸¥ ÇÔ¼öµé¿¡ ´ëÇØ¼µµ ¼³¸íÇϵµ·Ï ÇϰڴÙ.
(zlib¿¡¼´Â Å©°Ô À¯Æ¿¸®Æ¼ ÇÔ¼ö, ±âº» ÇÔ¼ö, °í±Þ ÇÔ¼ö ¼¼°³·Î ºÐ·ùµÇ¾î¼
¼³¸íÇϰí ÀÖ´Ù.)
</para>
<section>
<title>À¯Æ¿¸®Æ¼ ÇÔ¼ö¼³¸í</title>
<para>
À¯Æ¿¸®Æ¼ ÇÔ¼öµéÀº ¸» ±×´ë·Î ÀÀ¿ë ¾ÖÇø®ÄÉÀÌ¼Ç ·¹º§¿¡¼
°£´ÜÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â ³ôÀº ¼öÁØÀÇ ÇÔ¼öµé·Î½á ´ÙÀ½Àå¿¡ ¼³¸íÇϰԵÉ
±âº»ÇÔ¼öµéÀÇ ÀÀ¿ëÇÔ¼öµéÀÌ´Ù.
</para>
<para>
³ôÀº ¼öÁØÀÇ ÇÔ¼öµéÀÎ ¸¸Å »ç¿ëÇÏ±â ÆíÇÏ°í ´ëºÎºÐÀÇ ¾ÐÃàÀÛ¾÷À» Çϴµ¥ ÀÖ¾î¼
¿©±â¿¡¼ Á¦°øÇÏ´Â °Íµé·Î ÃæºÐÇÒ °ÍÀÌ´Ù.
</para>
<para>
ÇÔ¼öµéÀ» »ìÆìº¸¸é ¾Ë°ÚÁö¸¸ ÆÄÀϰü·Ã ÀÛ¾÷À» À§ÇØ »ç¿ëµÇ´Â ÇÔ¼öµé°ú À̸§À̳ª ¾²ÀÓ»õ°¡
¸Å¿ì ºñ½ÁÇÏ´Ù´Â°É ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±âÁ¸ÀÇ Ç¥ÁØÀûÀÎ ÇÔ¼öµé°ú ºñ½ÁÇÑ ÀÎÅÍÆäÀ̽º¸¦
À¯ÁöÇϹǷνá ÇÔ¼ö¸¦ ÀÌÇØÇÏ°í »ç¿ëÇϱⰡ Á»´õ ¼ö¿ùÇÏ´Ù.
</para>
<section>
<title>compress</title>
<para>
<screen>
int compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);
</screen>
À̸§¿¡¼ ¾Ë ¼ö ÀÖµíÀÌ µ¥ÀÌÅ͸¦ ¾ÐÃàÇϱâ À§Çؼ »ç¿ëµÈ´Ù. sourceµ¥ÀÌÅ͸¦
sourceLenÅ©±â ¸¸Å ¾ÐÃàÀ» ÇØ¼ dest ¹öÆÛ·Î º¹»çÇÑ´Ù.
destLenÀº dest¹öÆÛÀÇ ÃÑ Å©±âÀε¥, ÃÖ¼ÒÇÑ sourceLen 0.1%Á¤µµ Å©°Ô Àâ¾Æ
ÁÖ¾î¾ß ÇÑ´Ù. ¾ÐÃàÀ» ½Ç½ÃÇÒ °æ¿ì ¹Ýµå½Ã µ¥ÀÌÅÍÀÇ Å©±â°¡ ÀÛ¾ÆÁú °Å¶ó°í
»ý°¢ÇÒ ¼ö ÀÖ°ÚÁö¸¸ ¿ÀÈ÷·Á Ä¿Áö´Â °æ¿ìµµ »ý±æ ¼ö Àֱ⠶§¹®ÀÌ´Ù.
¸Å¿ì ÀÛÀº µ¥ÀÌÅ͸¦ ¾ÐÃàÇϰųª ÀÌ¹Ì ¾ÐÃàµÈ µ¥ÀÌÅ͸¦ ¾ÐÃàÇÏ´Â °æ¿ì
¾ÐÃàµÈ µ¥ÀÌÅÍ¿¡ zlibÇì´õ°¡ ºÙ¾î¼ ¿ÀÈ÷·Á µ¥ÀÌÅÍÀÇ ¾çÀÌ ´õ Ä¿Áú ¼öµµ ÀÖ´Ù.
</para>
<para>
<emphasis>compress</emphasis>´Â ¼º°øÀûÀ¸·Î ¾ÐÃàµÇ¾úÀ» °æ¿ì
<emphasis>Z_OK</emphasis>¸¦
¸Þ¸ð¸®°¡ ÃæºÐÇÏÁö ¾ÊÀ»°æ¿ì <emphasis>Z_MEM_ERROR</emphasis>, ¹öÆÛÀÇ
Å©±â°¡ ÃæºÐÇÏÁö ¾ÊÀ»°æ¿ì <emphasis>Z_BUF_ERROR</emphasis>¸¦ ¸®ÅÏÇÑ´Ù.
</para>
</section>
<section>
<title>compress2</title>
<para>
<screen>
int compress2(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level);
</screen>
levelÀ̶õ ÀÎÀÚ°¡ Ãß°¡µÈ°Í ¿Ü¿¡´Â <emphasis>compress</emphasis>¿Í ¿ÏÀüÈ÷
µ¿ÀÏÇÏ´Ù. levelÀº ¾ÐÃàÀÇ Á¤µµ¸¦ °áÁ¤Çϱâ À§Çؼ »ç¿ëÇÏ´Â °ÍÀ¸·Î 0¿¡¼ 9»çÀÌÀÇ
°ªÀ» °¡Áø´Ù. 0Àº °¡Àå ºü¸¥ ¾ÐÃà½Ã°£À» º¸¿©ÁÖ¸ç 9´Â ÃÖ°íÀÇ ¾ÐÃà·üÀ» º¸¿©ÁØ´Ù.
¸¸¾à levelÀ» 0À¸·Î ÇÏ¿´´Ù¸é ÀüÇô ¾ÐÃàÀ» ÇÏÁö ¾Ê´Â´Ù´Â Àǹ̷Πµ¥ÀÌÅÍ º¹»ç¸¦ ÇÏ´Â °Í°ú
µ¿ÀÏÇÑ È¿°ú¸¦ º¸¿©ÁØ´Ù.
</para>
<para>
¸®ÅϰªÀº commpress¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÔÀ¸·Î Âü°íÇϱ⠹ٶõ´Ù.
</para>
</section>
<section>
<title>uncompress</title>
<para>
<screen>
int uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);
</screen>
¾ÐÃàµÈ µ¥ÀÌÅÍÀÇ ¾ÐÃàÀ» Ç®±â À§Çؼ »ç¿ëÇÑ´Ù. ¾ÐÃàµÈ µ¥ÀÌÅÍ <emphasis>source</emphasis>¸¦
sourceLen±æÀ̸¸Å ÀÐ¾î¼ ¾ÐÃàÀ» ÇØÁ¦ÇÑ´ÙÀ½ <emphasis>dest</emphasis>¹öÆÛ¿¡ ÀúÀåÇÑ´Ù.
<emphasis>destLen</emphasis>´Â dest¹öÆÛÀÇ Å©±â·Î ¾ÐÃàÀÌ Ç®¸± µ¥ÀÌÅÍÀÇ Å©±â¸¦ ¿¹»óÇØ¼
ÃæºÐÈ÷ Å©°Ô Àâ¾Æ¾ß ÇÑ´Ù. ¾ÐÃàÀ» ÇØÁ¦ÇÏ´Â ÀÛ¾÷ÀÌ ¼º°øÀûÀ¸·Î ÀÌ·ç¾îÁ³´Ù¸é ½ÇÁ¦ ¾ÐÃàÀÌ
Ç®¸° µ¥ÀÌÅÍÀÇ Å©±â°¡ destLen¿¡ µé¾î°¡°Ô µÈ´Ù.
</para>
<para>
¼º°øÀûÀ¸·Î ¼öÇàµÇ¾úÀ» °æ¿ì Z_OK°¡ ¸®ÅϵǸç, ¸Þ¸ð¸®°¡ ÃæºÐÄ¡ ¾ÊÀ»°æ¿ì Z_MEM_ERROR,
¹öÆÛÀÇ Å©±â°¡ ÃæºÐÄ¡ ¾ÊÀ» °æ¿ì Z_BUF_ERROR, ¾ÐÃ൥ÀÌÅͰ¡ À߸øµÇ¾î ÀÖÀ» °æ¿ì
Z_DATA_ERRORÀ» ¸®ÅÏÇÑ´Ù.
</para>
</section>
<section>
<title>gzopen</title>
<para>
<screen>
typedef voidp gzFile;
gzFile gzopen(const char *path, const char *mode);
</screen>
¾ÐÃàµÈ µ¥ÀÌÅ͸¦ Àаųª ¾²±â À§Çؼ gzipÆÄÀÏÀ» ¿¬´Ù. µÎ¹øÂ° ÀÎÀÚÀÎ
<emphasis>mode</emphasis>´Â "rb", "wb"µîÀÌ »ç¿ëµÈ´Ù.
ÆÄÀÏÀÌ ¾ÐÃàÆ÷¸äµÈ ÆÄÀÏÀÌ ¾Æ´Ï´õ¶óµµ »ó°üÀº ¾ø´Ù. ¼º°øÀûÀ¸·Î
ÆÄÀÏÀ» ¿¾úÀ»°æ¿ì gzFile¸¦ ¸®ÅÏÇϴµ¥, ¾ÐÃàÆÄÀÏ ½ºÆ®¸²À¸·Î gzread, gzwriteµîÀÇ
ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼ ½ÇÁúÀûÀÎ ¾ÐÃàÀÛ¾÷À» ÇÒ¶§ (ÆÄÀÏÁöÁ¤ÀÚ)ó·³ »ç¿ëµÈ´Ù.
</para>
<para>
ÆÄÀÏÀ» ¿±â¿¡ ½ÇÆÐÇßÀ» °æ¿ì NULLÀ» ¸®ÅÏÇÑ´Ù.
</para>
</section>
<section>
<title>gzdopen</title>
<para>
<screen>
gzFile gzdopen(int fd, const char *mode);
</screen>
¿°íÀÚ ÇÏ´Â ÆÄÀÏÀÇ À̸§ÀÌ µé¾î°¡´Â ´ë½Å ÆÄÀÏ ÁöÁ¤ÀÚ°¡ µé¾î°£´Ù´Â °Í¸¸À» Á¦¿ÜÇϰí´Â
gzopen°ú µ¿ÀÏÇÏ°Ô ÀÛµ¿ÇÑ´Ù. ÆÄÀÏÁöÁ¤ÀÚ´Â open, creat, pipe, filnoµîÀ¸·Î »ý¼ºµÈ´Ù.
</para>
<para>
½ÇÆÐÇßÀ» °æ¿ì NULLÀ» ¸®ÅÏÇÑ´Ù.
</para>
</section>
<section>
<title>gzsetparams</title>
<para>
<screen>
int gzsetparams(gzFile file, int level, int strategy);
</screen>
µ¿ÀûÀ¸·Î ¾ÐÃà·¹º§(level)°ú ¾ÐÃàÁ¤Ã¥(strategy)À» º¯°æÇϱâ À§Çؼ »ç¿ëµÈ´Ù.
levelÀº ¾ÐÃà·üÀ» ÁöÁ¤Çϱâ À§Çؼ »ç¿ëµÈ´Ù.
</para>
<para>
¾ÐÃàÁ¤Ã¥Àº Z_DEFAULT_STRATEGY¿Í Z_FILTERED, Z_HUFFMAN_ONLY Áß Çϳª¸¦
¼±ÅÃÇÒ ¼ö ÀÖ´Ù.
</para>
<para>
¼º°øÇßÀ» °æ¿ì Z_OK¸¦ ½ÇÆÐÇßÀ» °æ¿ì Z_STREAM_ERRORÀ» ¸®ÅÏÇÑ´Ù.
</para>
</section>
<section>
<title>gzread</title>
<para>
<screen>
int gzread(gzFile file, voidp buf, unsigned len);
</screen>
¾ÐÃàÆÄÀÏ ½ºÆ®¸² file·Î ºÎÅÍ lenÅ©±â¸¸Å ÀÐ¾î¼ ¾ÐÃàÀ» Ǭ´ÙÀ½ buf¿¡ ÀúÀåÇÑ´Ù.
¸¸¾à ÆÄÀÏÀÌ gzip Æ÷¸ËÀÌ ¾Æ´Ò°æ¿ì ´Ü¼øÈ÷ µ¥ÀÌÅ͸¦ º¹»çÇÑ´Ù.
</para>
<para>
¼º°øÇßÀ» °æ¿ì ¾ÐÃàÇ®¸° µ¥ÀÌÅÍÀÇ Å©±â¸¦ µÇµ¹·ÁÁØ´Ù. ÆÄÀÏÀÇ ³¡ÀÏ °æ¿ì 0À»
±×¹ÛÀÇ ¿¡·¯¿¡ ´ëÇØ¼´Â -1À» ¸®ÅÏÇÑ´Ù.
</para>
</section>
<section>
<title>gzwrite</title>
<para>
<screen>
int gzwrite (gzFile file, const voidp buf, unsigned len);
</screen>
<emphasis>buf</emphasis>·Î ºÎÅÍ lenÅ©±â¸¸Å µ¥ÀÌÅ͸¦ Àоîµé¿©¼ ¾ÐÃàÀ» ÇÑ´ÙÀ½
file¿¡ ¾´´Ù. ¼º°øÀûÀ¸·Î ¼öÇàµÇ¾ú´Ù¸é ÀÔ·ÂµÈ ¿øº» µ¥ÀÌÅÍÀÇ Å©±â°¡ ¸®Åϵǰí,
½ÇÆÐ ÇßÀ» °æ¿ì 0ÀÌ ¸®ÅϵȴÙ.
</para>
</section>
<section>
<title>int VAgzprintf</title>
<para>
<screen>
int VAgzprintf(gzFile file, const char *format, ...);
</screen>
Æ÷¸Ë ÀúÀåÀ» À§ÇÑ fprintf(3)¸¦ ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ÇÔ¼ö´Â fprintfÀÇ ¾ÐÃà¹öÁ¯À̶ó°í
ÇÒ¸¸ÇÏ´Ù. Æ÷¸ËÀ» ¹Þ¾Æ¼ ¾ÐÃàÇÑ´ÙÀ½¿¡ ÀúÀåÇÑ´Ù. ¼º°øÇßÀ» °æ¿ì ¾ÐÃà¿¡ »ç¿ëµÈ µ¥ÀÌÅÍÀÇ
Å©±â¸¦ ¸®ÅÏÇÏ°í ½ÇÆÐÇßÀ» °æ¿ì 0À» ¸®ÅÏÇÑ´Ù.
</para>
</section>
<section>
<title>gzputs</title>
<para>
<screen>
int gzputs(gzFile file, const char *s);
</screen>
³ÎÀÌ Á¦°ÅµÈ ¹®ÀÚ¿À» ¹Þ¾Æµé¿©¼ ¾ÐÃàÇÑ´Ù.
</para>
<para>
¼º°øÇßÀ» °æ¿ì ¹®ÀÚ¿ÀÇ Å©±â¸¦ ±×·¸Áö ¾ÊÀ» °æ¿ì -1À» ¸®ÅÏÇÑ´Ù.
</para>
</section>
<section>
<title>gzgets</title>
<para>
<screen>
char *gzgets(gzFile file, char *buf, int len);
</screen>
¾ÐÃàÆÄÀÏ ½ºÆ®¸² file·Î ºÎÅÍ µ¥ÀÌÅ͸¦ Àоîµé¿©¼ ¾ÐÃàÀ» Ǭ´ÙÀ½ ¹®ÀÚ¿À» µÇµ¹·ÁÁØ´Ù.
µ¥ÀÌÅ͸¦ ÀÐÀ» ¶§´Â len - 1¸¸ÅÀ» ÀÐ¾î µéÀÌ¸ç °³Ç๮ÀÚ¸¦ ¸¸³ª¸é ¸®ÅϽÃŲ´Ù.
fgets(3)ÀÇ ¾ÐÃà¹öÁ¯ÀÌ´Ù.
</para>
<para>
½ÇÆÐ ÇßÀ»°æ¿ì Z_NULLÀ» ¸®ÅÏÇÑ´Ù.
</para>
</section>
<section>
<title>gzputc</title>
<para>
<screen>
int gzputc(gzFile file, int c);
</screen>
¹®ÀÚ <emphasis>c</emphasis>¸¦ unsigned char·Î º¯°æÇÑ´ÙÀ½ file·Î ÀúÀåÇÑ´Ù.
¼º°øÇϸé ÀÔ·ÂÇÑ °ªÀ» ¸®ÅÏÇÏ°í ½ÇÆÐÇßÀ» °æ¿ì -1À» ¸®ÅÏÇÑ´Ù.
</para>
</section>
<section>
<title>gzgetc</title>
<para>
<screen>
int gzgetc(gzFile file);
</screen>
¾ÐÃàÆÄÀÏ·Î ºÎÅÍ 1¹ÙÀÌÆ®¸¦ ÀоîµéÀδÙ. ¼º°øÇϸé ÀоîµéÀÎ °ªÀ» ¸®ÅÏÇϰí
ÆÄÀÏÀÇ ³¡À» ¸¸³µ°Å³ª ½ÇÆÐÇßÀ» °æ¿ì -1À» ¸®ÅÏÇÑ´Ù.
</para>
</section>
<section>
<title>gzfluseh</title>
<para>
<screen>
int gzflush(gzFile file, int flush);
</screen>
Ãâ·Â´ë±â ÁßÀÎ ¸ðµç µ¥ÀÌÅ͸¦ ÆÄÀÏ¿¡ ¾´´Ù.
</para>
<para>
¼º°øÇßÀ» °æ¿ì Z_OK¸¦ ¸®ÅÏÇÑ´Ù.
</para>
</section>
<section>
<title>gzseek</title>
<para>
<screen>
z_off_t gzseek(gzFile file, z_off_t offset, int whence);
</screen>
<emphasis>file</emphasis>¿¡¼ gzread³ª gzwrite¸¦ ÀÌ¿ëÇÒ ½ÃÀÛ À§Ä¡¸¦
ÁöÁ¤Çϱâ À§Çؼ »ç¿ëÇÑ´Ù. lseek(2)¿Í ºñ½ÁÇÏ´Ù°í º¼¼ö ÀÖ´Ù.
<emphasis>offset</emphasis>Àº ¾ÐÃàÀÌ Ç®¸° µ¥ÀÌÅÍÀÇ º¯À§¸¦ °¡¸£Å²´Ù.
<emphasis>whence</emphasis>´Â lseek(2)¿¡¼¿Í µ¿ÀÏÇÑ °ªÀ» »ç¿ëÇÒ ¼ö
ÀÖÁö¸¸ SEEK_END°¡ Áö¿øµÇÁö ¾Ê´Â´Ù. whence¿¡ ´ëÇØ¼ ÀÚ¼¼È÷ ¾Ë±æ ¿øÇÑ´Ù¸é
<ulink url=http://www.joinc.co.kr/modules.php?name=News&file=article&sid=98>lseek¸¦ ÀÌ¿ëÇÑ ÆÄÀϳ» À§Ä¡À̵¿</ulink>¸¦ Âü°íÇϱ⠹ٶõ´Ù.
</para>
<para>
ÀÌ ÇÔ¼ö´Â ¾ÐÃàµÈ ÆÄÀϳ»¿¡¼ À§Ä¡À̵¿À» ÇÏ´Â°Ô ¾Æ´Ñ ¾ÐÃàÀÌ Ç®¸° µ¥ÀÌÅͳ»¿¡¼ÀÇ
À§Ä¡À̵¿À» ÇÏ°Ô µÇ¹Ç·Î, ÆÄÀÏÀÌ Àбâ À§Çؼ ¿·Á ÀÖ´Â °æ¿ì ±Øµµ·Î ´À¸®°Ô ÀÛµ¿ÇÒ °ÍÀÌ´Ù.
¸¸¾à ÆÄÀÏÀÌ ¾²±â À§Çؼ ¿·Á ÀÖ´Ù¸é ´ÜÁö Àü¹æÇâ À̵¿(forward seek)¸¸ Çã¿ë µÈ´Ù.
</para>
<para>
¼º°øÇßÀ» °æ¿ì ¾ÐÃàÀÌ Ç®¸° µ¥ÀÌÅÍÀÇ ½ÃÀÛÁöÁ¡¿¡¼ÀÇ º¯À§°ªÀ» µÇµ¹·ÁÁÖ°í
½ÇÆÐ ÇßÀ»°æ¿ì -1À» ¸®ÅÏÇÑ´Ù.
</para>
</section>
<section>
<title>gzrewind</title>
<para>
<screen>
int gzrewind(gzFile file);
</screen>
ÆÄÀÏÀ» óÀ½À¸·Î µÇµ¹¸°´Ù. Àбâ¸ðµå·Î ¿¾úÀ» ¶§¸¸ »ç¿ë°¡´ÉÇÏ´Ù.
gzrewind(file)´Â gzseek(file, 0L, SEEK_SET)¿Í µ¿ÀÏÇÏ´Ù.
</para>
</section>
<section>
<title>gzeof</title>
<para>
<screen>
int gzeof(gzFile file);
</screen>
ÆÄÀÏ¿¡¼ ³¡À» ¸¸³¯°æ¿ì 1À» ¸®ÅÏÇÑ´Ù. ±×·¸Áö ¾ÊÀ»°æ¿ì 0À» ¸®ÅÏÇÑ´Ù.
</para>
</section>
<section>
<title>gzclose</title>
<para>
<screen>
int gzclose(gzFile file);
</screen>
¾ÐÃà°ú °ü·ÃµÈ ¸ðµç ÀÛ¾÷ÀÌ ³¡³ª°í Fluseh±îÁö ¼º°øÀûÀ¸·Î ¼öÇàÇß´Ù¸é, gzclose¸¦ È£ÃâÇØ¼
¾ÐÃàµÈ ÆÄÀÏÀ» ´Ý°í ¸ðµç ÀÚ¿øÀ» ÇØÁ¦ ÇØ¾ß ÇÑ´Ù.
</para>
</section>
<section>
<title>gzerror</title>
<para>
<screen>
const char * gzerror(gzFile file, int *errnum);
</screen>
¸¶Áö¸· ¿¡·¯¿¡ ´ëÇÑ ¿¡·¯ ¸Þ½ÃÁö¸¦ µÇµ¹·ÁÁØ´Ù. errnumÀº zlib¿¡¼ »ç¿ëÇÏ´Â ¿¡·¯¹øÈ£´Ù.
¸¸¾à ¿¡·¯°¡ zlib°¡ ¾Æ´Ñ ´Ù¸¥ (¿¹¸¦ µé¾î¼ ÆÄÀÏ ½Ã½ºÅÛ)°÷¿¡¼ ¹ß»ýÇÑ °ÍÀ̶ó¸é errnumÀº
Z_ERRNO·Î ä¿öÁø´Ù. À̶§´Â errno¸¦ °Ë»ç Çϵµ·Ï ÇÑ´Ù.
</para>
</section>
<section>
<title>zlibVersion</title>
<para>
<screen>
const char *zlibVersion(void);
</screen>
¾ÖÇø®ÄÉÀ̼ÇÀÌ »ç¿ëÇÏ´Â zlib¹öÁ¯À» È®ÀÎÇϱâ À§Çؼ »ç¿ëÇÑ´Ù.
¸¸¾à ¾ÖÇø®ÄÉÀ̼ÇÀÇ zlib¹öÁ¯°ú zlib.h¿¡ ¼±¾ðµÈ ZLIB_VERSION¹öÁ¯ÀÇ Ã¹±ÛÀÚ°¡
Ʋ¸®´Ù¸é ÀÌ ¾ÖÇø®ÄÉÀ̼ÇÀº zlibȣȯ ¹®Á¦·Î »ç¿ëÇÒ ¼ö ¾ø°ÔµÈ´Ù.
</para>
<para>
´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î ¹öÁ¯È£È¯¿©ºÎ¸¦ üũÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
<screen>
...
if (strncmp(zlibVersion(), ZLIB_VERSION, 1) != 0)
{
printf("Version error\n");
exit(1);
}
...
</screen>
</para>
</section>
</section>
<section>
<title>¿¹Á¦</title>
<para>
2°³ÀÇ ¿¹Á¦ÆÄÀÏÀ» ÁغñÇß´Ù. Çϳª´Â ƯÁ¤ÆÄÀÏÀ» ¾ÐÃàÇÏ´Â ÇÁ·Î±×·¥À̰í
¶Ç´Ù¸¥ Çϳª´Â ¾ÐÃàµÈ ÆÄÀÏÀÇ ¿ø¹® ³»¿ëÀ» Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù.
¸Å¿ì °£´ÜÇÑ ¼Ò½º À̹ǷΠ¼³¸íÀº ÁÖ¼®À¸·Î ´ë½ÅÇϵµ·Ï ÇϰڴÙ.
</para>
<section>
<title>ÆÄÀÏ ¾ÐÃà ¿¹Á¦</title>
<para>
<emphasis>¿¹Á¦ : jzip.c</emphasis>
<screen>
/*
* ÆÄÀϸí : jzip.c
* »ç¿ë¹ý : # jzip [filename]
* ¾ÐÃàÇϰíÀÚ ÇÏ´Â filename¸¦ ÀÔ·ÂÇϸé filename.gzÀ̶ó´Â ¾ÐÃàÆÄÀÏÀÌ
* »ý¼ºµÈ´Ù.
*/
// zlib Çì´õÆÄÀÏ
#include <zlib.h>
// Ç¥ÁØ CÇì´õÆÄÀÏ
#include <stdio.h>
#include <fcntl.h>
int main(int argc, char **argv)
{
char *filename = NULL;
char *gzfilename = NULL;
gzFile *zfp;
int fd;
int n;
char buf[256];
int lerrno;
if(argc !=2)
{
printf("Usage : jzip [file name]\n");
exit(0);
}
filename = argv[1];
// ¾ÐÃàÆÄÀÏÀÇ À̸§Àº filename.gz À¸·Î ÇÑ´Ù.
gzfilename = (char *)malloc(strlen(filename)*sizeof(char));
sprintf(gzfilename, "%s.gz", filename);
// ¾ÐÃà¿øº» ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇÑ´Ù.
if (access(filename, F_OK) != 0)
{
printf("Á¸ÀçÇÏÁö ¾Ê´Â ÆÄÀÏÀÔ´Ï´Ù\n");
exit(0);
}
if ((fd = open(filename, O_RDONLY)) < 0)
{
printf("file open error\n");
exit(0);
}
// ¾ÐÃàÆÄÀÏÀ» ¿¬´Ù.
if ((zfp = gzopen(gzfilename, "wb")) == NULL)
{
exit(0);
}
// ¿øº»ÆÄÀÏÀ» ¿¡¼ µ¥ÀÌŸ¸¦ ÀоîµéÀ̰í
// gzwriteÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼ µ¥ÀÌÅ͸¦ ¾ÐÃàÇÏ°í ÆÄÀÏ¿¡ ¾´´Ù.
while((n = read(fd, buf, 255)) > 0)
{
if (gzwrite(zfp, buf, n) < 0)
{
printf("%s\n",gzerror(zfp, &lerrno));
exit(0);
}
}
gzclose(zfp);
printf("¾ÐÃà ¼º°ø : %s => %s\n", filename, gzfilename);
}
</screen>
ÄÄÆÄÀÏ ÇÒ ¶§´Â ¹Ýµå½Ã zlib¸¦ ¸µÅ© ½ÃÄÑÁà¾ß ÇÑ´Ù.
<screen>
# gcc -o jzip jzip.c -lz
</screen>
</para>
</section>
<section>
<title>¾ÐÃà ÇØÁ¦ ¿¹Á¦</title>
<para>
À̹ø ÇÁ·Î±×·¥Àº ¾ÐÃàµÈ text¹®¼ÀÇ ¿ø·¡ ³»¿ëÀ» º¸¿©ÁÖ´Â
°£´ÜÇÑ ÇÁ·Î±×·¥ÀÌ´Ù.
</para>
<para>
<emphasis>¿¹Á¦ : jcat.c</emphasis>
<screen>
#include <zlib.h>
#include <stdio.h>
int main(int argc, char **argv)
{
char *filename = NULL;
gzFile *zfp;
char buf[1024];
if (argc != 2)
{
printf("Usage : jcat [file name]\n");
exit(0);
}
filename = argv[1];
if ((zfp = gzopen(filename, "rb")) == NULL)
{
exit(0);
}
while(gzgets(zfp, buf, 1023) != NULL)
{
printf("%s", buf);
}
gzclose(zfp);
}
</screen>
</para>
</section>
</section>
<section>
<title>³×Æ®¿öÅ© ¾ÖÇø®ÄÉÀ̼ǿ¡¼ÀÇ È°¿ë</title>
<para>
zlib´Â ÀÏ¹Ý ÆÄÀÏÀ» ¾ÐÃàÇϱâ À§ÇÑ ¿ëµµ·Î ¸Å¿ì ÈǸ¢ÇÑ µµ±¸À̱ä ÇÏÁö¸¸
ÀÎÅͳÝÀ» ÅëÇØ ´ë·®ÀÇ Á¤º¸¸¦ º¸³»´Â ¿äÁò¿¡´Â ƯÈ÷ ³×Æ®¿öÅ©¿¡¼ÀÇ µ¥ÀÌÅÍ ¾ÐÃàÀ»
À§Çؼµµ Áß¿äÇÏ°Ô »ç¿ëµÈ´Ù.
</para>
<para>
´ëºÎºÐÀÇ À¥¼¹ö¿Í À¥Å¬¶óÀÌ¾ðÆ®´Â zlib¸¦ ÀÌ¿ëÇØ¼ ÀÚüÀûÀ¸·Î ÇÊ¿äÇÑ µ¥ÀÌÅ͸¦
¾ÐÃàÇϰí ÇØÁ¦ÇÏ¸é¼ °¡´ÉÇÑÇÑ ³×Æ®¿öÅ©ÀÇ ÀÚ¿øÀ» È¿À²ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï
ÀÛ¼ºµÇ¾îÁö°í ÀÖ´Ù. °ø¿ëÀ¸·Î »ç¿ëµÇ´Â ³×Æ®¿öÅ© º¸´Ù´Â ¾Æ¹«·¡µµ °³ÀÎÀÌ
»ç¿ëÇÏ´Â PCÀÇ (CPU)ÀÚ¿øÀ» Ȱ¿ëÇÏ´Â°Ô ¿©·¯¸ð·Î È¿À²ÀûÀ̱⠶§¹®ÀÌ´Ù.
</para>
<para>
³×Æ®¿öÅ© ¾ÖÇø®ÄÉÀ̼ǿ¡¼ µ¥ÀÌÅ͸¦ ¾ÐÃà½ÃÄѼ Àü¼ÛÇϱâ À§Çؼ´Â
uncompress, compressµîÀÇ ¾ÐÃà¸í·ÉÀ» ÁÖ·Î »ç¿ëÇÑ´Ù. ÀÌµé ³»¿ë¿¡ ´ëÇØ¼´Â
ÀÚ¼¼È÷ ´Ù·çÁö ¾ÊÀ» °ÍÀÌ´Ù. Á÷Á¢ ±¸ÇöÇØº¸´Â °Íµµ ¸Å¿ì Àç¹ÌÀÖÀ» °ÍÀÌ´Ù.
</para>
</section>
</section>
</article>
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|