Ãßõ½ÎÀÌÆ®

2000/07/21(18:18) from 203.254.154.69
ÀÛ¼ºÀÚ : °­ÁÙ±â (jkkang65@hanmail.net) Á¶È¸¼ö : 6249 , ÁÙ¼ö : 1014
GDBM ÇÑ±Û ¸Þ´º¾ó
 ÇÏÀÌÅÚ ½Ã»ðÀ̽ŠÇѵ¿ÈÆ´ÔÀÇ gdbm °­ÁÂÀÔ´Ï´Ù.

[°­ÁÂ] DB¸¦ ÆíÇÏ°Ô, gdbm (1)                 06/02 20:15   495 line

GNU gdbm (GNU DataBase Manager) ÇÁ·Î±×·¡¹Ö °­Á (1)
----------------------------------------------------

 ±Û¾´ÀÌ   : Çѵ¿ÈÆ ddoch@hitel.kol.co.kr
 ³¯  Â¥   : 1997.5.30
 ÀúÀÛ±Ç   : »ó¾÷ÀûÀÎ ¿ëµµ°¡ ¾Æ´ÑÇÑ ¾îµð·Îµç À̵¿ ¹× °ÔÁ¦ °¡´É
 ºÎŹ»çÇ× : Áú¹®°ú °ü·ÃµÈ ³»¿ëÀ̳ª ´äº¯À» ¿äÇÏ´Â ³»¿ëÀº ¸ÞÀÏ·Î Àû¾îÁÖÁö
            ¸¶½Ã°í °ü·Ã ÇÁ·Î±×·¡¹Ö °Ô½ÃÆÇÀ» ÀÌ¿ëÇØ ÁÖ½Ã¸é ¼ºÀDz¯ ´äº¯ÇØ
            µå¸®°Ú½À´Ï´Ù. Á¦°¡ »ó´çÈ÷ °ÔÀ¸¸¥ °ü°è·Î Áú¹®¸ÞÀÏ¿¡ Á¦´ë·Î ´ä
            º¯À» ¸øÇص帮°í ÀÖ´Â Á¡ Á˼ÛÇÕ´Ï´Ù.


  ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê  
 ¢Ê                ¸ñ      Â÷                    ¢Ê
   ¢Ê                                              ¢Ê
 ¢Ê      1. µé¾î°¡´Â ¸»                          ¢Ê
   ¢Ê      2. µµÀÔ°ú Àü°³                          ¢Ê
 ¢Ê      3. ¿©·¯ ÇÔ¼öµé                          ¢Ê
   ¢Ê      4. ±×¿ÜÀÇ ´Ù¸¥ °Í                       ¢Ê
 ¢Ê      5. ÇÁ·Î±×·¥À» Çѹø Â¥º¾½Ã´Ù             ¢Ê
   ¢Ê                                              ¢Ê
  ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê ¢Ê


1. µé¾î°¡´Â ¸»

¾È³çÇϼ¼¿ä. ddoch Çѵ¿ÈÆÀÔ´Ï´Ù.

¸®´ª½º¸¦ »ç¿ëÇϽø鼭, µ¥ÀÌÅÍ Ã³¸®¸¦ ¸¹ÀÌ ÇÏ½Ç °ÍÀÔ´Ï´Ù. ¿¹Àü¿¡ DOS¿¡¼­ µ¹¾Æ
°¡´ø dBASE °°Àº °ÍÀ» »ç¿ëÇϽôø ±â¾ïÀÌ ¾î·ÅDzÀÌ ¶°¿À¸£½Ã´Â ºÐµéµµ °è½Ç°Ì´Ï´Ù.
¸¹Àº ºÐµé Áß¿¡¼­ ¸®´ª½º¿¡¼­ ¾µ¸¸ÇÑ µ¥ÀÌÅͺ£À̽º°¡ ¾ø³ªÇÏ°í ãÀ¸½Ã´Â ºÐµéµµ ¸¹
ÀÌ °è½Ã´õ±º¿ä.

'µðºñÀÔ¹®'... ±Û½ê¿ä..
Àû´çÇÑ ÀÔ¹®Ã¥À» Çϳª ±¸Çϼż­ º¸¼Åµµ ÁÁÀ» °ÍÀÔ´Ï´Ù. DB¿¡ ´ëÇØ Àü¹®ÇÁ·Î±×·¡
¸Ó°¡ ¾Æ´Ñ ÀÏ¹Ý ÇÁ·Î±×·¡¸Ó³ª »ç¿ëÀÚ¶ó¸é ±»ÀÌ ±×·² ÇÊ¿ä±îÁö´Â ¾øÀ» °Ì´Ï´Ù.

Àß ¾Æ½Ã°ÚÁö¸¸, ¸®´ª½º¿¡¼­ µ¹¾Æ°¡´Â °ü°èÇü µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛ(RDBMS, ÁÙ¿©¼­
'RDB' ¶ó°íµµ ÇÏÁÒ)À¸·Î´Â ¸¹Àº °ÍµéÀÌ ÀÖ½À´Ï´Ù. ´ëÇ¥ÀûÀÎ °ÍÀ¸·Î´Â °ø°³¿ëÀÎ
postgreSQLÀÌ ÀÖÀ¸¸ç, °ø°³¿ëÀº ¾Æ´Ñ mSQL, ±×¿Ü¿¡ ´Ù¸¥ ÅøµéÀÌ ¸¹ÀÌ ÀÖ½À´Ï´Ù.
±×¿Ü¿¡µµ ÇöÀç ¸¹Àº »ó´çÈ÷ ÈǸ¢ÇÑ ±â´ÉµéÀ» °¡Áø RDBMSµéÀÌ ³ª¿À°í ÀÖ´Â »óÅÂ
ÀÔ´Ï´Ù. ÀÌ·¯ÇÑ °ÍµéÀº ÃÖÁ¾»ç¿ëÀÚ¿¡°Ôµµ ÈǸ¢ÇÑ DB ¸Å´ÏÁ®°¡ µÇ°í, ÇÁ·Î±×·¡¸Ó
¿¡°Ôµµ È°¿ëÇÒ ¼ö ÀÖ´Â ´Ù¾çÇÑ ±â´ÉµéÀ» Á¦°øÇÕ´Ï´Ù.

±âȸ°¡ ÀÖÀ¸¸é, postgreSQL °°Àº °ÍÀº ´ÙÀ½±âȸ¿¡ ¼Ò°³Çϱâ·Î ÇÏ°í,
À̹ø ±âȸ¿¡ ¸»¾¸µå¸± °ÍÀº, ÇÁ·Î±×·¡¸Ó¿¡°Ô ¿ä±äÇÑ DB °ü¸® ÅøÀÔ´Ï´Ù.

"ÇÁ·Î±×·¥ ÀÛ¼ºÁß DB°ü·Ã ºÎºÐÀ» ¾î¶»°Ô ó¸®ÇϽʴϱî?" ¶ó´Â Áú¹®¿¡, RDBMS¿Í ¿¬
µ¿ÇÏ¿© ó¸®ÇϽô ºÐµéµµ °è½Ç °ÍÀÌ°í ¸ðµç ·çƾÀ» ³»ºÎÀûÀ¸·Î ¸¸µé¾î¼­ »ç¿ëÇÏ
½Ã´Â ºÐ, C ³ª C++·Î Â¥¿©Áø  DB ó¸®ÅøÀ» »ç¿ëÇϽô ºÐµéµµ ÀÖÀ» °ÍÀÔ´Ï´Ù.
Àúµµ »ç½Ç RDBMS ³ª DB ó¸®ÅøµéÀº Àß »ç¿ëÇÏÁö ¾Ê¾Ò½À´Ï´Ù. »ç¿ëÇϸé ÁÁÀ» ÅÙµ¥,
´ÜÁö ±ÍÂú´Ù´Â ÇϳªÀÇ ÀÌÀ¯¸¸À¸·Î ³»ºÎÀûÀ¸·Î Æã¼ÇÀ» ¸¸µé¾î¼­ 󸮸¦ ¸¹ÀÌ ÇØ
¿Ô´ø °Í °°½À´Ï´Ù.

ÇÏÁö¸¸, ÇÁ·Î±×·¥ÀÌ ´ëÇüÈ­ µÇ°í, Áß¿äÇÑ DB¸¦ ´Ù·é´Ù´øÁö, ¶Ç´Â ÆÛÆ÷¸Õ½º Çâ»ó,
´ÙÁß ÇÁ·Î¼¼½º ȯ°æ¿¡¼­ÀÇ ¿©·¯¹®Á¦ µéÀ» ÇØ°áÇÏ°í ½Í´Ù¸é DB ó¸®Àü¹® ÅøÀ̳ª,
RDBMS ¸¦ »ç¿ëÇÏ½Ã±æ ¹Ù¶ø´Ï´Ù.

gdbm Àº ³»ºÎÀûÀ¸·Î DB¸¦ Àü¹®ÀûÀ¸·Î ó¸®ÇÏ´Â ¿©·¯ ÇÔ¼ö·Î ±¸¼ºµÈ ¶óÀ̺귯¸®ÀÔ
´Ï´Ù. GNU 'dbm'Àº Philip A. Nelson ¾¾¿¡ ÀÇÇØ ¾²¿©Á³½À´Ï´Ù. »ç½Ç GNU dbmÀº
´Ù¸¥ Ç¥ÁØ UNIX dbm ÀÎ 'dbm' À̳ª 'ndbm'°ú ȣȯ¼ºÀ» À¯ÁöÇϱâ À§Çؼ­ ³»ºÎ¿¡ µû
·Î Á¤ÀÇµÈ Çì´õÆÄÀÏ°ú ¶óÀ̺귯¸®¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.

ÀÌ ¼ÒÇÁÆ®¿þ¾îµéÀº ÇÏÀÌÅÚ ¸®´ª½ºµ¿ÀÚ·á½Ç('gdbm173.tgz')À̳ª sunsite.unc.edu
ÀÇ "/pub/Linux/libs/db/" ¿¡¼­ ãÀ» ¼ö ÀÖ½À´Ï´Ù. ÇöÀç ½±°Ô ±¸ÇÒ ¼ö ÀÖ´Â gdbm
ÀÇ ¹öÁ¯Àº 1.7.3 À̸ç, ¼Ò½º¸¦ ±¸Çϼż­ ¼³Ä¡¸¦ ÇϽñ⠹ٶø´Ï´Ù. ¹°·Ð, °øÀ¯¶óÀÌ
ºê·¯¸®¿Í Çì´õÆÄÀϸ¸À¸·Î µÈ ¹ÙÀ̳ʸ® ¹èÆ÷ÆÇÀ¸·Î ±¸Çؼ­ ¼³Ä¡Çصµ gdbm À» »ç¿ëÇÏ
´Â µ¥´Â ÁöÀåÀÌ ¾øÁö¸¸ Ȥ½Ã¶óµµ ¸ð¸¦ 'dbm' À̳ª 'ndbm' °úÀÇ È£È¯¼ºÀ» À¯ÁöÇϱâ
À§ÇÑ ¶óÀ̺귯¸® ¹× Çì´õÆÄÀÏÀº ºüÁ® ÀÖÀ¸´Ï ÁÖÀÇÇϽñ⠹ٶø´Ï´Ù. gdbm Àº 1.7.1
ÀÇ ¸Þ´º¾óÀ» ³»ºÎ¿¡ info ÆÄÀÏÇü½ÄÀ¸·Î Æ÷ÇÔÇÏ°í ÀÖ½À´Ï´Ù. ±×¿Ü¿¡ ¹öŬ¸®ÀÇ 'db'
µµ ÀÖ±ä ÇÏÁö¸¸, ¹öŬ¸®ÀÇ db º¸´Ù´Â GPLÀ» µû¸£°í ÀÖ´Â gdbmÀ» »ç¿ëÇϽñ⸦ ±ÇÀå
ÇÕ´Ï´Ù.

'gdbm' À» »ç¿ëÇÏ¸é ¾î¶² °ÍÀÌ ÁÁÀ»±î¿ä?

1) µ¥ÀÌÅÍ ÆÄÀÏÀÇ »èÁ¦, °»½Å, ÆíÁý µîµîÀÇ °ü¸®¿¡ Á÷Á¢ ½Å°æÀ» ¾²Áö ¾Ê¾Æµµ
   µË´Ï´Ù. ÀÌ ÀÛ¾÷Àº gdbm ÀÌ ÃÖÀûÈ­µÈ »óŸ¦ À¯ÁöÇϸ鼭 ¿¡·¯»óÅÂ¿Í ¿©·¯
   °¡ÁöÀÇ °æ¿ì¿¡ gdbm ÀÌ ³»ºÎÀûÀ¸·Î ´ëÀÀÇÏ´Ï ½Å°æ ¾µ ÇÊ¿ä´Â ¾ø½À´Ï´Ù.

2) µ¥ÀÌÅÍ °Ë»ö¿¡ ÃÖ¼±ÀÇ ¾Ë°í¸®ÁòÀ» »ç¿ëÇϹǷΠ¼Óµµ¸éÀ̳ª ÆÛÆ÷¸Õ½º ¸é¿¡¼­
   »ó´çÇÑ È¿°ú¸¦ °¡Á®¿Ã ¼ö ÀÖ½À´Ï´Ù. DB ¸¦ ÀÏÀÏÀÌ ÇÏÀ§ ·¹À̾î±îÁö ¼ÕÀ¸·Î
   Â© °æ¿ì¿¡ ¹ß»ýÇÏ´Â °¢Á¾ °íÈ¿À² ¾Ë°í¸®ÁòÀ» ±¸ÇöÇϱâ À§Çؼ­ ¸Ó¸®¸¦ ½âÀÏ
   Çʿ伺ÀÌ ¾ø´Ù´Â °ÍÀÔ´Ï´Ù. ÀÌ ÀÛ¾÷Àº gdbm ÀÌ ÃÖ¼±ÀÇ È¿À²¼ºÀ» À¯ÁöÇϸ鼭
   Çؽ¬Å×À̺íÀ» ÅëÇØ ´ë½ÅÇÕ´Ï´Ù.

3) DB ±¸Ãà°ú ¿î¿ë¿¡ ³ë·ÂÀÌ ÈξÀ Àû°Ô µé¾î°©´Ï´Ù.
   gdbm ¿¡ ÀûÀýÇÑ µ¥ÀÌÅ͸¦ ³Ñ°ÜÁÜÀ¸·Î½á DB ±¸ÃàÀº ³¡ÀÌ ³ª¹Ç·Î ³ª¸ÓÁö ³ë·Â
   À» ´Ù¸¥ °÷¿¡ ½ñÀ» ¼ö ÀÖ½À´Ï´Ù.
   ¹°·Ð, RDBMS ÀÇ ÀåÁ¡ÀÎ º¹ÀâÇÑ °ü°è¸¦ ó¸®Çϰųª À¶Å뼺À» ¹ßÈÖÇÏÁö´Â ¸ø
   ÇÏÁö¸¸ ±×¸¸Å­ »ç¿ëÀ̳ª ¿î¿ëÀÌ ¿ëÀÌÇÏ´Ù´Â ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù.

4) 'dbm', 'ndbm' °úÀÇ È£È¯¼ºÀ» À¯ÁöÇÏ´Â ·çƾÀ» °¡Áú ¼ö ÀÖ½À´Ï´Ù.
   gdbm ¿¡¼­ Á¦°øÇÏ´Â ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¿© Ç¥ÁØ UNIX 'dbm' À̳ª 'ndbm' °ú
   È£È¯ÇÏ´Â ÇÁ·Î±×·¥À» © ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í 'dbm' À̳ª 'ndbm' ¿¡¼­ »ç¿ë
   ÇÏ´ø µ¥ÀÌÅͺ£À̽º ÆÄÀÏÀ» 'gdbm' ÀÌ »ç¿ëÇÏ´Â ÆÄÀÏÀÇ Æ÷¸ËÀ¸·Î À¯Æ¿¸®Æ¼¸¦
   »ç¿ëÇÏ¿© ¹Ù²Ü ¼ö ÀÖ½À´Ï´Ù. ¹°·Ð, GNU 'dbm' ÀÇ ±â´ÉÀº ´õ¿í´õ Çâ»óµÈ ±â´É
   À» Á¦°øÇÕ´Ï´Ù.


     +-----------------+      request        +-----------------+
     |  GDBM function  |   ------------->    | internal DB    |
     |                 |    DB name, key     |                 |
     | gdbm_open       |                     |  db create      |
     | gdbm_fetch      |      result         |  hash table     |
     | .........       |   <-------------    |  searching ...  |
     +-----------------+   modified DB       +-----------------+
    |                      return value   | |                   |
    +-------------------------------------+ +-------------------+
             User area                         GDBM Internal area

             [ GDBM µ¥ÀÌÅÍ º£À̽º ¸Þ´ÏÁ®ÀÇ °³³ä ]


°á·ÐÀûÀ¸·Î ¸»¾¸µå¸®¸é, DB ±¸ÃàÀ̳ª DB ³»ºÎ¿¡±îÁö ÇÁ·Î±×·¡¸Ó°¡ ½Å°æ¾µ ÇÊ¿ä¾ø
ÀÌ gdbm ¶óÀ̺귯¸®°¡ Á¦°øÇØÁÖ´Â ÀÎÅÍÆäÀ̽º ÇÔ¼ö¸¦ ÅëÇؼ­ ÀûÀýÇÑ µ¥ÀÌÅ͸¸ ³Ñ
°ÜÁÖ¸é µÈ´Ù´Â À̾߱âÀ̹ǷΠDB ÇÁ·Î±×·¡¹Ö¿¡ ¾ÆÁÖ Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

´Ü, 12°³ÀÇ ÇÔ¼ö¸¸ ÀÍÈ÷½Ã¸é ¿©·¯ºÐµéÀÇ DB ÇÁ·Î±×·¡¹Ö¿¡ È°·Â¼Ò°¡ µÉ °ÍÀÔ´Ï´Ù.

º» °­Á´ gdbm ÀÇ info ¸Þ´º¾ó¿¡ ¹ÙÅÁÇϸ鼭, ¿¹¸¦ µé¾î°¡¸é¼­ ¼³¸íÇϵµ·Ï ÇÏ°Ú
½À´Ï´Ù.


2. µµÀÔ°ú Àü°³

gdbm Àº Ç¥ÁØ UNIX dbm ÀÇ ÇÔ¼ö¿Í À¯»çÇÏ°Ô ÀÛµ¿ÇÏ´Â µ¥ÀÌÅÍ º£À̽º ÇÔ¼ö¸ðÀ½Áý
ÀÔ´Ï´Ù. ÀÌ ÇÔ¼öµéÀ» »ç¿ëÇÏ¿© µ¥ÀÌÅͺ£À̽º ÆÄÀϵéÀ» ¸¸µé°Å³ª ó¸®ÇÒ ¼ö ÀÖ½À
´Ï´Ù. gdbm ÀÇ ±âº»ÀûÀ¸·Î key/data ¸¦ ¦À¸·Î µ¥ÀÌÅͺ£À̽º ÆÄÀÏ¿¡ ÀúÀåÇÏ¿© ó
¸® ÇÕ´Ï´Ù. key ´Â Áߺ¹µÇÁö ¾Ê´Â À¯ÀÏÇÑ °ªÀ̾î¾ß Çϸç, °¢°¢ÀÇ key´Â ´Ü ÇϳªÀÇ
µ¥ÀÌÅ;ÆÀÌÅÛ°ú °áºÎÁö¾îÁ®¾ß ÇÕ´Ï´Ù. key´Â °ðÀå ¼ø¼­´ë·Î Á¤¸®µÈ »óÅ·ΠÁ¢±Ù
ÇÒ ¼ö ¾ø½À´Ï´Ù. gdbm ÀÇ ±âº»ÀûÀÎ À¯´ÖÀº ´ÙÀ½ÀÇ ±¸Á¶Ã¼ÀÔ´Ï´Ù.

      typedef struct {
char *dptr;
              int  dsize;
      } datum;

ÀÌ ±¸Á¶Ã¼´Â Å©±â°¡ Á¦ °¢°¢ÀÎ key¿Í data ¾ÆÀÌÅÛÀ» Çã¿ëÇÕ´Ï´Ù.
char * ÇüÀÎ dptr ¿¡ ¾ó¸¶´øÁö Å©°í º¹ÀâÇÑ ±¸Á¶Ã¼¶óµµ ÁÖ¼Ò¸¦ ÀúÀåÇÏ¿© °ªÀ» ²¨
Áý¿¡ ³¾¶§´Â Çüº¯È¯ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

key/data ´Â ÇѦÀ¸·Î gdbm ÀÇ µð½ºÅ© ÆÄÀÏ¿¡ ÀúÀåÀÌ µË´Ï´Ù. ÀÌ°ÍÀº gdbm µ¥ÀÌÅÍ
º£À̽º¶ó°í ºÎ¸¨´Ï´Ù. ÇϳªÀÇ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ µ¥ÀÌÅͺ£À̽ºÀÇ key¿Í data¸¦ ó¸®
ÇϱâÀ§Çؼ­´Â gdbm µ¥ÀÌÅͺ£À̽º¸¦ ¿­¾î¾ß ÇÕ´Ï´Ù. ´ç¿¬ÇÑ À̾߱â°ÚÁö¿ä..
¶ÇÇÑ, gdbm ¿¡¼­´Â ÇϳªÀÇ ¾îÇø®ÄÉÀ̼ÇÀÌ µ¿½Ã¿¡ ¿©·¯ µ¥ÀÌÅͺ£À̽º¸¦ ¿©´Â °ÍÀÌ
°¡´ÉÇÕ´Ï´Ù. ÇϳªÀÇ ¾îÇø®ÄÉÀ̼ÇÀÌ ÇÑ°³ÀÇ gdbm µ¥ÀÌÅͺ£À̽º¸¦ ¿­ ¶§, ±×°ÍÀº
'reader' ³ª 'writer'·Î ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù. º¸Åë gdbm µ¥ÀÌÅͺ£À̽º´Â Çѹø¿¡
ÇϳªÀÇ writer¿¡ ÀÇÇØ ¸¹ÀÌ °³ºÀµË´Ï´Ù. ±×·¯³ª, ¸¹Àº reader µéÀº ÇØ´ç µ¥ÀÌÅÍ
º£À̽º¸¦ µ¿½Ã¿¡ ¿­ ¼ö ÀÖ½À´Ï´Ù. reader ¿Í writer ´Â µ¿½Ã¿¡ gdbm µ¥ÀÌÅͺ£À̽º
¸¦ ¿­Áö´Â ¸øÇÕ´Ï´Ù.

gdbm Àº µ¥ÀÌÅͺ£À̽º¸¦ ´Ù·ç±âÀ§Çؼ­ ´ÙÀ½ÀÇ ÇÔ¼öµéÀ» Áö¿øÇÕ´Ï´Ù. ÇÔ¼öÀ̸§°ú
ÀÎÀڵ鿡¼­µµ ±× ¿ªÇÒÀ» ÁüÀÛÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. 12°³ Á¤µµÀÇ ÇÔ¼ö¼ÂÀÌ´Ï ±×¸®
¸¹Àº °ÍÀº ¾Æ´Ò °Ì´Ï´Ù. ÀÌ ÇÔ¼öµéÀº 'gdbm.h'¿¡ ¼±¾ðµÇ¾î Àִµ¥, 'gdbm.h'´Â
¼³Ä¡½Ã '/usr/include' ³ª '/usr/local/include' ¿¡ À§Ä¡ ÇÒ °ÍÀÔ´Ï´Ù.

    #include
    
    GDBM_FILE gdbm_open(name, block_size, flags, mode, fatal_func);
    void gdbm_close(dbf);
    int gdbm_store(dbf, key, content, flag);
    datum gdbm_fetch(dbf, key);
    int gdbm_delete(dbf, key);
    datum gdbm_firstkey(dbf);
    datum gdbm_nextkey(dbf, key);
    int gdbm_reorganize(dbf);
  void gdbm_sync(dbf);
    int gdbm_exists(dbf, key);
    char *gdbm_strerror(errno);
    int gdbm_setopt(dbf, option, value, size)


3. ¿©·¯ ÇÔ¼öµé

1) µ¥ÀÌÅÍ º£À̽º ¿­±â

 ¿©±â¿¡¼­´Â gdbm ½Ã½ºÅÛÀ» ÃʱâÈ­½ÃÅ°´Â °ÍÀ» ¼³¸íÇÕ´Ï´Ù. ÃʱâÈ­ ·çƾ½ÇÇà ÈÄ¿¡
 0 ¹ÙÀÌƮ¥¸® ÆÄÀÏÀÌ »ý°å´Ù¸é Á¤»óÀûÀ¸·Î ¼öÇàµÈ °ÍÀÔ´Ï´Ù.
 'gdbm' ¤ÔÆÄÀÏÀ» °³ºÀÇÏ´Â ÇÁ·Î½ÃÁ®´Â ´ÙÀ½°ú °°½À´Ï´Ù.

 GDBM_FILE dbf;
 dbf = gdbm_open(name, block_size, flags, mode, fatal_func);

 °¢°¢ÀÇ ÆĶó¸ÞÅÍ´Â ´ÙÀ½°ú °°½À´Ï´Ù.

 char *name
   ÆÄÀÏÀÇ ¿ÏÀüÇÑ À̸§. gdbm ¿¡¼­´Â È®ÀåÀÚ °³³äµµ ¾øÀ¸¸ç Ưº°ÇÑ È®Àå¸íÀ» µÚ
   ¿¡ ºÙÀÌÁöµµ ¾Ê½À´Ï´Ù.

 int block_size
   ÀÌ°ÍÀº ÃʱâÈ­ ÇÒ µ¿¾È ´Ù¾çÇÑ »ý¼ºÀ» À§ÇÑ Å©±â¸¦ °áÁ¤Çϱâ À§ÇØ »ç¿ëÇÕ´Ï´Ù.
   ½ÇÁ¦ÀûÀ¸·Î´Â µð½ºÅ©¿¡¼­ ¸Þ¸ð¸®·Î Çѹø¿¡ Àü¼ÛÇÏ´Â Å©±â¸¦ ³ªÅ¸³À´Ï´Ù. ÀÌÀü
   ¿¡ ±× ÆÄÀÏÀÌ ÃʱâÈ­ µÇ¾ú´Ù¸é ÀÌ ÀÎÀÚ´Â ¹«½ÃµÇ¸ç, ÃÖ¼Ò°ªÀº 512À̸ç, ¸¸ÀÏ
   ÀÌ ÀÎÀÚÀÇ °ªÀÌ 512º¸´Ù ÀÛ´Ù¸é ÇØ´ç ÆÄÀÏ ½Ã½ºÅÛÀÇ ºí·Ï»çÀÌÁî°¡ »ç¿ëµÇ¸ç,
   ´Ù¸¥ °æ¿ì´Â block_size °ªÀÌ »ç¿ëµË´Ï´Ù.
   µû¶ó¼­, ÃÖ´ëÀÇ È¿À²À» ³¾ ¼ö ÀÖ´Â Å©±â¸¦ ÁöÁ¤Çϸé ÁÁÀ» °ÍÀÔ´Ï´Ù.

 int flags
   flags °¡ GDBM_READER ·Î ¼¼Æ®µÇ¾î ÀÖÀ¸¸é, ´ÜÁö µ¥ÀÌÅͺ£À̽º ÆÄÀÏÀ» Àб⸸
   À» ÇÒ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼­ 'gdbm_store', 'gdbm_delete' ·çƾÀ» È£ÃâÇÏ¸é ´ç
   ¿¬È÷ ½ÇÆÐÇÏ°Ô µË´Ï´Ù.
   ¸¹Àº reader µéÀº ¶ÇÇÑ, µ¿½Ã¿¡ ÇÑ µ¥ÀÌÅͺ£À̽º¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù.
   flags °¡ GDBM_WRITER À̸é, µ¥ÀÌÅͺ£À̽º¸¦ ÀÐ°í ¾²±â¸¦ ¸ðµÎ ÇÒ ¼ö ÀÖÀ¸¸ç,
   ¹èŸÀûÀÎ Á¢±ÙÀÌ ÇÊ¿äÇÕ´Ï´Ù. (µ¿½Ã¿¡ ÇÑÆÄÀÏ¿¡ ¾²±â¸¦ ½ÃµµÇÒ °æ¿ì, ¾î¶² ºÒ
   »ó»ç°¡ ÀϾ´Â Áö´Â ÃßÃà¿¡ ¸Ã±â°Ú½À´Ï´Ù. :))
   flags °¡ GDBM_WRCREAT ·Î ¼¼Æ®µÇ¾î ÀÖÀ¸¸é, µ¥ÀÌÅͺ£À̽º¸¦ ÀÐ°í ¾²±â¸¦ ¸ðµÎ
   ÇÒ ¼ö ÀÖÀ¸¸ç, µ¥ÀÌÅͺ£À̽º°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é, »õ·Î¿î °ÍÀ» Çϳª ¸¸µì´Ï
   ´Ù.
   flags °¡ GDBM_NEWDB ·Î ¼¼Æ®µÇ¾î ÀÖÀ¸¸é, µ¥ÀÌÅͺ£À̽º°¡ ±âÁ¸¿¡ ÀÖ´ÂÁö ¾ø´Â
   Áö¿¡ »ó°üÇÏÁö ¾Ê°í »õ·Î¿î °ÍÀ» Çϳª ¸¸µé¸ç, Àб⠾²±â¸¦ ¸ðµÎ ÇÒ ¼ö ÀÖ½À
   ´Ï´Ù.
   ¸ðµç writer (GDBM_WRITER, GDBM_WRCREAT, GDBM_NEWDB) ¿¡´Â GDBM_FAST Ç÷¡
   ±×¸¦ Ãß°¡·Î ¼¼ÆÃÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¿É¼ÇÀº ÃÖ´ëÇÑÀÇ Áö¿¬¾²±â¸¦ ÇÔÀ¸·Î½á
   ¼Óµµ»óÀÇ ÀÕÁ¡À» °¡Á®¿À´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. µû¶ó¼­, ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé, ¼Ó
   µµ»óÀÇ ÀÕÁ¡Àº °¡Á®¿Ã ¼ö ÀÖÀ¸³ª writer °¡ ºñÁ¤»óÀûÀÎ Áß´ÜÀ» ÇÒ °æ¿ì¿¡´Â,
   µ¥ÀÌÅÍ°¡ ÀÏÄ¡ÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ½À´Ï´Ù.
   ¸¸ÀÏ ¿¡·¯°¡ ¹ß»ýÇß´Ù¸é, NULLÀ» ¸®ÅÏ°ªÀ¸·Î µ¹·ÁÁÖ°í, Àû´çÇÑ °ªÀÌ
   gdbm_errno ¿¡ ¼¼Æ®°¡ µÉ °ÍÀÔ´Ï´Ù. ¿¡·¯°¡ ¾ø´Ù¸é, gdbm ÆÄÀÏ µð½ºÅ©·´Æ®
   Æ÷ÀÎÅÍ°¡ ¸®Åϵ˴ϴÙ.

 int mode
   ÆÄÀÏ ¸ðµå. (chmod(2)¿Í open(2)¿¡¼­ »ç¿ëÇÏ´Â ÆÄÀϸðµå)   
 
 void (*fatal_func) ()
   Ä¡¸íÀûÀÎ ¿¡·¯°¡ ¹ß»ýÇÏ¿´À» °æ¿ì¿¡ gdbm ÀÌ È£ÃâÇÒ ÇÔ¼öÀÔ´Ï´Ù. ÀÌ ÇÔ¼öÀÇ
   ÀÎÀÚ´Â ¹®ÀÚ¿­¸¸ÀÌ °¡´ÉÇÕ´Ï´Ù. ±× °ªÀÌ NULLÀ̶ó¸é gdbm ÀÌ Á¦°øÇÒ °ÍÀ̸ç,
   gdbm Àº ±âº» ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù.


¸®ÅÏ°ªÀÎ, 'dbf' ´Â gdbm ÆÄÀÏ¿¡ Á¢±ÙÇÏ´Â ´Ù¸¥ ¸ðµç ÇÔ¼öµéÀÌ »ç¿ëÇÏ´Â Æ÷ÀÎÅÍ
ÀÔ´Ï´Ù. ¸¸ÀÏ ¸®ÅÏ°ªÀÌ NULL À̶ó¸é, gdbm_open Àº ½ÇÆÐÇÑ °ÍÀ̸ç, ¿¡·¯´Â gdbm
¿¡·¯¸¦ ¼¼Æ®ÇÏ´Â gdbm_errno ¿Í ÆÄÀÏ ½Ã½ºÅÛÀÇ ¿¡·¯°¡ Ç¥½ÃµÇ´Â errno ¿¡ ¼¼Æ®µË
´Ï´Ù.  (¿¡·¯ÄÚµå´Â 'gdbm.h'¸¦ ÂüÁ¶Çϼ¼¿ä.)

ÀÌÈÄ¿¡¼­ ¼³¸íÇÏ´Â ¸ðµç È£Ãâµé¿¡ À־ 'dbf' ´Â gdbm_open ÀÌ ¸®ÅÏÇÑ Æ÷ÀÎÅ͸¦
ÂüÁ¶ÇÕ´Ï´Ù.

2) µ¥ÀÌÅͺ£À̽º ´Ý±â

¿­¾úÀ¸¸é ´Ý´Â °ÍÀº ´ç¿¬ÇÑ °ÍÀÌ°ÚÁÒ? ¹«´õ¿î ¿©¸§µµ ´Ù°¡¿À´Â µ¥ ³ÃÀå°í¿¡¼­ ½Ã¿ø
ÇÑ ¼ö¹ÚÀ» Çѵ¢¾î¸® ²¨³»°í´Â ¹®À» ¾È´Ý¾Æ³õÀ¸¸é, ´ÙÀ½¿¡ ½Ã¿øÇÑ À½·á¼ö¸¦ »©¸Ô
À» ¼ö ¾øÀ» °Ì´Ï´Ù. :)

¿©·¯ ¶óÀ̺귯¸® ÇÔ¼öµéÀ» »ç¿ëÇϽô٠º¸¸é, ±âº»ÀûÀ¸·Î ÃʱâÈ­ºÎºÐ(init ¶Ç´Â
open), 󸮺κÐ, ¸¶¹«¸®ºÎºÐ(close ¶Ç´Â free..)À¸·Î µÇ¾î ÀÖ´Â °æ¿ì°¡ ¸¹½À´Ï´Ù.

gdbm ¶óÀ̺귯¸®¿¡µµ ´Ý´Â ÇÔ¼ö´Â ÀÖ½À´Ï´Ù.

    gdbm_close(dbf);

 GDBM_FILE dbf
  À¯ÀÏÇÑ ÇϳªÀÇ ÀÎÀÚ´Â gdbm_open ¿¡¼­ ¸®ÅÏµÈ Æ÷ÀÎÅÍÀÔ´Ï´Ù.

gdbm_close °¡ È£ÃâµÇ¸é gdbm ÆÄÀÏÀ» ´Ý°í 'dbf' ¿¡ ÇÒ´çµÈ ¸ðµç ¸Þ¸ð¸¦ ÀÚÀ¯·Ó
°Ô ÇÕ´Ï´Ù.

3) µ¥ÀÌÅͺ£À̽º¿¡ »ðÀÔ ¶Ç´Â ´ëü

gdbm_store ´Â µ¥ÀÌÅͺ£À̽º¿¡¼­ ·¹Äڵ带 »ðÀÔÇϰųª ´ëüÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù.

    ret = gdbm_store(dbf, key, content, flag);

°¢°¢ÀÇ ÀÎÀÚ´Â ´ÙÀ½°ú °°½À´Ï´Ù.

 GDBM_FILE dbf
   gdbm_open ÀÌ ¸®ÅÏÇÑ Æ÷ÀÎÅÍ

 datum key
   `key' µ¥ÀÌÅÍ

 datum content
   key ¿Í °ü·ÃµÇ´Â data

 int flag
   ÀÌ Ç÷¡±×´Â µ¥ÀÌÅͺ£À̽º¿¡¼­ ÇØ´ç key °¡ ÀÌ¹Ì ÀÖÀ» °æ¿ì¿¡ ÃëÇÒ ÇൿÀ»
   Á¤ÀÇÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù.
   GDBM_REPLACE ´Â ÀÌ¹Ì ÀÖ´Â data¸¦ »õ·Î¿î 'content' ·Î ´ëüÇÕ´Ï´Ù.
   GDBM_INSERT ´Â 'key' °¡ ÀÌ¹Ì ÀÖÀ» °æ¿ì¿¡ ¾Æ¹« Çൿµµ ÇÏÁö ¾Ê°í ¿¡·¯¸¦
   ¸®ÅÏÇϵµ·Ï ÇÕ´Ï´Ù.

 ¸®ÅÏµÈ 'ret' ÀÇ °ªÀº ´ÙÀ½°ú °°½À´Ï´Ù.

 -1
   È£ÃâÀÚ°¡ °ø½ÄÀûÀÎ writer °¡ ¾Æ´Ï°Å³ª, 'key' ³ª 'content' ¿¡ NULL Çʵ带
   ÁöÁ¤ÇÏ¿© µ¥ÀÌÅͺ£À̽º¿¡ ¾ÆÀÌÅÛÀ» ÀúÀåÇÏÁö ¸øÇÑ °æ¿ìÀÔ´Ï´Ù.
   'key' ¿Í 'content' µÑ´Ù NULL °ªÀÌ ¾Æ´Ñ µ¥ÀÌÅÍ Æ÷ÀÎÅÍ(dptr) Çʵ带 °¡Á®
   ¾ß ÇÕ´Ï´Ù. ´Ù¸¥ ÇÔ¼ö°¡ NULL µ¥ÀÌÅÍÆ÷ÀÎÅÍ(dptr) Çʵ带 ¿¡·¯¸¦ °Ë»çÇϱâ
   À§ÇØ »ç¿ëÇÏ¿´´Ù¸é, NULL Çʵå´Â À¯¿ëÇÑ µ¥ÀÌÅÍ°¡ µÉ ¼ö ¾ø½À´Ï´Ù.

 +1
   ÀÎÀÚ 'flag' °¡ GDBM_INSERT ÀÌ°í 'key' °¡ ÀÌ¹Ì µ¥ÀÌÅͺ£À̽º¿¡ À־ ¾ÆÀÌ
   ÅÛÀÌ ÀúÀåµÇÁö ¸øÇÑ °æ¿ìÀÔ´Ï´Ù.

 0
   ¼º°øÀûÀÏ °æ¿ì. 'content' ´Â 'key' ¿Í ¿¬°üµÇ¾úÀ¸¸ç, µð½ºÅ©»óÀÇ ÆÄÀÏÀÌ ¾÷
   µ¥ÀÌÆ®µÇ¾î¼­ »õ·Î¿î µ¥ÀÌÅͺ£À̽ºÀÇ ±¸Á¶´Â ÀÌ ÇÔ¼ö°¡ ¸®ÅÏÇϱâ ÀüºÎÅÍ ¿µÇâ
   À» ¹ÌĨ´Ï´Ù.

 ¸¸ÀÏ, µ¥ÀÌÅͺ£À̽º¿¡ ÀÌ¹Ì ÀÖ´Â 'key' ¿¡ ÇØ´çµÈ µ¥ÀÌÅ͸¦ ÀúÀåÇÑ´Ù¸é, gdbmÀº
 GDBM_REPLACE °¡ ¼¼Æ®µÇ¾î ÀÖ´Â °æ¿ì¿¡,  ¿À·¡µÈ µ¥ÀÌÅ͸¦ »õ·Î¿î µ¥ÀÌÅÍ·Î ´ë
 Ã¼ÇÒ °ÍÀÔ´Ï´Ù.
 ¾Æ¿ï·¯, ÇϳªÀÇ °°Àº key °ª¿¡ µÎ°³ÀÇ µ¥ÀÌÅÍ ¾ÆÀÌÅÛÀ» ÁöÁ¤ÇÒ ¼ö ¾øÀ¸¸ç, ÀÌ·²
 °æ¿ì¿¡ gdbm_store ´Â ¿¡·¯¸¦ ¹ß»ýÇÏÁö ¾Ê½À´Ï´Ù.

 gdbm ÀÇ Å©±â´Â 'dbm' À̳ª 'ndbm' °ú °°ÀÌ Á¦ÇѵÇÁö´Â ¾Ê½À´Ï´Ù. ¿©·¯ºÐµéÀÇ
 µ¥ÀÌÅÍ´Â ¿øÇÏ´Â ¸¸Å­ Å©°Ô ¸¸µé ¼ö ÀÖ½À´Ï´Ù.

 
4) µ¥ÀÌÅÍ º£À̽º¿¡¼­ ·¹Äڵ带 °Ë»öÇϱâ

 µ¥ÀÌÅͺ£À̽º¸¦ °Ë»öÇÏ´Â ÇÔ¼ö´Â gdbm_fetch ÇÔ¼öÀÔ´Ï´Ù. ÀÌ ÇÔ¼ö´Â ÁÖ¾îÁø
 Å°°ªÀ¸·Î ÀÌ¿Í °ü·ÃµÈ Á¤º¸¸¦ ¸®ÅÏÇÕ´Ï´Ù. ¸®ÅÏµÈ ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ´Â µ¿ÀûÀ¸·Î
 ÇÒ´çµÈ ¸Þ¸ð¸® ºí·ÏÀ» °¡¸£Å°´Â Æ÷ÀÎÅÍÀÔ´Ï´Ù.

      content = gdbm_fetch(dbf, key);

 °¢°¢ÀÇ ÀÎÀÚ´Â ´ÙÀ½°ú °°½À´Ï´Ù.

 GDBM_FILE dbf
   gdbm_open ¿¡¼­ ¸®ÅÏµÈ Æ÷ÀÎÅÍ
 
 datum key
   key data
  
'content' ¿¡¼­ ¸®ÅÏµÈ datum Àº ¹ß°ßµÈ µ¥ÀÌÅÍ¿¡ ´ëÇÑ Æ÷ÀÎÅÍ ÀÔ´Ï´Ù. ¸¸ÀÏ µ¥ÀÌ
ÅÍ Æ÷ÀÎÅÍ(dptr)°¡ NULL À̶ó¸é µ¥ÀÌÅ͸¦ ¹ß°ßÇÏÁö ¸øÇÑ °ÍÀÔ´Ï´Ù. µ¥ÀÌÅÍÆ÷ÀÎÅÍ
(dptr) °¡ NULL ÀÌ ¾Æ´Ï¶ó¸é dptr Àº ÇÒ´çµÈ µ¥ÀÌÅ͸¦ °¡¸£Åµ´Ï´Ù. 'gdbm' Àº
ÀÚµ¿ÀûÀ¸·Î ÀÌ µ¥ÀÌÅ͸¦ ¸Þ¸ð¸® ÇìÁ¦ ÇÏÁö´Â ¾Ê½À´Ï´Ù. ¿©·¯ºÐµéÀº ÀÌ°ÍÀ» ´Ù »ç
¿ëÇÏ°í ³ª¼­ ÀÚÀ¯·Ó°Ô ¸¸µé¾î¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ÀåÁ¡Àº ³ªÁß¿¡ ´Ù½Ã »ç¿ëÇϱâ À§
Çؼ­ ÀÌ °á°ú¸¦ º¹»çÇÒ ÇÊ¿ä°¡ ¾ø´Ù´Â À̾߱âÀÔ´Ï´Ù. Æ÷ÀÎÅ͸¸ ÀúÀåÇÏ¸é ³ªÁß¿¡
´Ù½Ã »ç¿ëÇÒ ¼ö ÀÖ°ÚÁö¿ä.

gdbm_fetch ¿Í´Â Á¶±Ý ´Ù¸£°Ô °£´ÜÇÏ°Ô ÇØ´çÇÏ´Â key ¿¡ ´ëÀÀÇÏ´Â µ¥ÀÌÅÍ°¡ ÀÖ´Â
Áö¸¦ °£´ÜÇÏ°Ô »ìÇ¥º¼ ¼öµµ ÀÖ½À´Ï´Ù.

     ret = gdbm_exists(dbf, key);

ÇØ´ç ÀÎÀÚ´Â ´ÙÀ½°ú °°½À´Ï´Ù.

GDBM_FILE dbf
  gdbm_open ¿¡¼­ ¸®ÅÏµÈ Æ÷ÀÎÅÍ

datum key
  'key' data
 
ÀÌ ·çƾÀº ¾î¶°ÇÑ ¸Þ¸ð¸®µµ ÇÒ´çÇÏÁö ¾ÊÀ¸¸ç, ´ÜÁö ÇØ´çÇÏ´Â 'key' °¡ Á¸ÀçÇÏ´Â
Áö ÇÏÁö ¾Ê´Â Áö¿¡ µû¶ó true ³ª faluse ¸¦ ¸®ÅÏÇÕ´Ï´Ù.

5) µ¥ÀÌÅͺ£À̽º¿¡¼­ ·¹ÄÚµå Á¦°ÅÇϱâ

 µ¥ÀÌÅͺ£À̽º¿¡¼­ ·¹Äڵ带 Á¦°ÅÇϱâ À§Çؼ­´Â ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µË´Ï´Ù.

      ret = gdbm_delete(dbf, key);

 °¢°¢ÀÇ ÀÎÀÚ´Â ´ÙÀ½°ú °°½À´Ï´Ù.

 GDBM_FILE dbf
   gdbm_open ¿¡¼­ ¸®ÅÏµÈ Æ÷ÀÎÅÍ

 datum key
   'key' µ¥ÀÌÅÍ

 ¾ÆÀÌÅÛÀÌ ¾ø°Å³ª ¿äûÀÚ°¡ reader ¶ó¸é ret °ªÀº -1 ÀÔ´Ï´Ù. ¼º°øÀûÀ¸·Î Á¦°ÅÇß
 ´Ù¸é 0À» ¸®ÅÏÇÕ´Ï´Ù.

 gdbm_delete ´Â key ¿¡ °ü·ÃµÈ ¾ÆÀÌÅÛ°ú key ¸¦ µ¥ÀÌÅͺ£À̽º 'dbf' ¿¡¼­ Á¦°Å¸¦
 ÇÕ´Ï´Ù. µð½ºÅ©»óÀÇ ÆÄÀÏÀº ¾÷µ¥ÀÌÆ®µÇ°í »õ·Î¿î µ¥ÀÌÅͺ£À̽ºÀÇ ±¸Á¶´Â ÀÌ ÇÔ¼ö
 °¡ ¸®ÅÏÇϱâÀü ºÎÅÍ ¿µÇâÀ» ¹ÌĨ´Ï´Ù.

6) ·¹Äڵ忡 ¿¬¼ÓÀûÀ¸·Î Á¢±ÙÇϱâ

 ´ÙÀ½ÀÇ µÎ°³ÀÇ ÇÔ¼ö´Â µ¥ÀÌÅͺ£À̽º¿¡¼­ ¸ðµç ¾ÆÀÌÅÛÀ» Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù.
 ÀÌ·¯ÇÑ Á¢±ÙÀº 'key' °ªÀÌ ¿¬¼ÓµÇÁö ¾Ê½À´Ï´Ù. ±×·¯³ª µ¥ÀÌÅͺ£À̽º¿¡¼­ ¸ðµç
 'key' ¸¦ Çѹø ¹æ¹®ÇÑ´Ù´Â °ÍÀº º¸ÁõÇÕ´Ï´Ù. ¹æ¹®ÇÏ´Â ¼ø¼­´Â Çؽ¬ °ª°ú °ü·Ã
 ÀÌ ÀÖ½À´Ï´Ù. gdbm_firstkey ´Â µ¥ÀÌÅͺ£À̽º¿¡¼­ ¸ðµç Å°¸¦ ¹æ¹®Çϱ⠽ÃÀÛÇÏ
 ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. gdbm_nextkey ´Â 'dbf' ÀÇ Çؽ¬ ±¸Á¶¿¡¼­ ´ÙÀ½ ¿£Æ®¸®¸¦ ¹ß
 °ßÇÏ°í ÀоîµéÀÔ´Ï´Ù.

      key = gdbm_firstkey(dbf);

      nextkey = gdbm_nextkey(dbf, key);

 °¢°¢ÀÇ ÀÎÀÚ´Â ´ÙÀ½°ú °°½À´Ï´Ù.

 GDBM_FILE dbf
   gdbm_open ¿¡¼­ ¸®ÅÏµÈ Æ÷ÀÎÅÍ

 datum `key'
 datum nextkey
   'key' data

 ¸®ÅÏ°ªÀº µÑ´Ù datum ÇüÀÔ´Ï´Ù. ¸¸ÀÏ key.dptr À̳ª nextkey.dptr ÀÌ NULLÀ̶ó¸é
 , ù¹ø° 'key' ³ª ´ÙÀ½ 'key' °¡ ¾øÀ» °æ¿ìÀÔ´Ï´Ù. dptr Æ÷ÀÎÅÍ´Â malloc ¿¡
 ÀÇÇØ ÇÒ´çµÈ µ¥ÀÌÅÍ¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀ̸ç gdbm Àº ±×°ÍÀ» ¾Ë¾Æ¼­ free ÇÏÁö ¾Ê´Â
 ´Ù´Â °ÍÀ» ´Ù½Ã Çѹø À¯ÀÇÇϼ¼¿ä.

 ÀÌ ÇÔ¼öµéÀº µ¥ÀÌÅͺ£À̽º¸¦ Àбâ¸ðµå ¾Ë°í¸®ÁòÀ¸·Î ¹æ¹®ÇÑ´Ù°í ÇÕ´Ï´Ù.

 ÆÄÀÏ '¹æ¹®' Àº Çؽ¬Å×ÀÌºí¿¡ ±âÃÊÇÕ´Ï´Ù. gdbm_delete ´Â Çؽ¬ Å×À̺íÀ» ÀçÁ¤
 ·ÄÇÕ´Ï´Ù. ¿ø·¡ key ÀÇ ¼ø¼­´Â ¸ðµç °æ¿ì¿¡ À־ º¯°æµÇÁö ¾ÊÀº ä·Î ³²¾ÆÀÖ
 ´Ù´Â °ÍÀ» º¸ÁõÇÏÁö´Â ¸øÇÕ´Ï´Ù. ¸¸¾à ·çÇÁ°¡ ´ÙÀ½°ú °°ÀÌ ½ÇÇàµÈ´Ù¸é ¾î¶² ¸î
 ¸î key ´Â ¹æ¹®ÇÏÁö ¾Ê°Ô ¸¸µé ¼öµµ ÀÖ½À´Ï´Ù.
 
       key = gdbm_firstkey ( dbf );
       while ( key.dptr ) {
        nextkey = gdbm_nextkey ( dbf, key );
         if ( some condition ) {
           gdbm_delete ( dbf, key );
           free ( key.dptr );
         }
         key = nextkey;
       }

7) µ¥ÀÌÅͺ£À̽ºÀÇ µ¿½Ã¼º

 µ¥ÀÌÅͺ£À̽º¸¦ óÀ½¿¡ GDBM_FAST Ç÷¡±×·Î ¿­¾ú´Ù¸é, gdbm Àº º¯°æµÈ ³»¿ëÀÌ
 µð½ºÅ©·Î ¿ÏÀüÇÏ°Ô ¾²¿©Áö±â¸¦ ±â´Ù¸®Áö ¾Ê½À´Ï´Ù. À̸¦ °æ¿ì ¾îÇø®ÄÉÀ̼ÇÀÌ
 ºñÁ¤»óÀûÀÎ Áß´ÜÀÌ µÇ¾úÀ» ¶§ µ¥ÀÌÅͺ£À̽º°¡ º¯Á¶µÉ À§Ç輺À» °¡Áö°í ÀÖ½À´Ï
 ´Ù. ´ÙÀ½ÀÇ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù¸é ÇöÀç¿¡ º¯È­µÈ ¸ðµç °ÍµéÀ» ÇØ´ç µ¥ÀÌÅͺ£À̽º
 ÆÄÀÏ·Î ¾²±â¸¦ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

    gdbm_sync(dbf);

 ½©¸í·É¿¡¼­ 'sync'·Î Áö¿¬¾²±â µÈ °ÍÀ» µð½ºÅ©·Î ¾²´Â °Í°ú ºñ½ÁÇÕ´Ï´Ù.

 GDBM_FILE dbf
   gdbm_open¿¡¼­ ¸®ÅÏµÈ Æ÷ÀÎÅÍ

 ÀÌ ÇÔ¼ö´Â º¸Åë ¸¹Àº º¯È­°¡ ÀÖ°í ³­ ´ÙÀ½¿¡, ¿À·£½Ã°£µ¿¾È wait ¸¦ Çϱâ ÀÌÀü¿¡
 È£ÃâÇÕ´Ï´Ù.
 gdbm_close ´Â ÀÚµ¿ÀûÀ¸·Î 'gdbm_sync' ¸¦ È£ÃâÇÑ°Í°ú °°Àº È¿°ú¸¦ °¡Áö¸ç, µ¥
 ÀÌÅͺ£À̽º¿¡¼­ º¯È­°¡ ÀÖ°í³­ ´ÙÀ½¿¡ Áï°¢ÀûÀ¸·Î ´ÝÇû´Ù¸é ´õÀÌ»óÀÇ È£ÃâÀº ÇÊ
 ¿ä¾ø½À´Ï´Ù.

8) ¿¡·¯ ¸Þ½ÃÁö

 gdbm ÀÇ ¿¡·¯Äڵ带 ¿¡·¯ ¹®ÀÚ¿­·Î º¯È¯Çϱâ À§Çؼ­´Â ´ÙÀ½ ·çƾÀ» »ç¿ëÇØ¾ß ÇÕ
 ´Ï´Ù.

      ret = gdbm_strerror(errno)

 gdbm_error errno
   gdbm ¿¡·¯ÄÚµå. º¸Åë gdbm_errno ÀÔ´Ï´Ù.

 ÀÌ ÇÔ¼ö´Â »ç¿ëÀÚ°¡ ÀÐÀ» ¼ö ÀÖ´Â ¹®ÀÚ¿­À» ¹ÝȯÇÕ´Ï´Ù.

9) ¿É¼Ç ¼¼ÆÃÇϱâ

 gdbm Àº ÇöÀç ¿­·ÁÁ® ÀÖ´Â µ¥ÀÌÅͺ£À̽º»ó¿¡¼­ ¾î¶² ¿É¼ÇÀ» »õ·ÎÀÌ ¼³Á¤ÇÒ ¼ö
 ÀÖ´Â ´É·ÂÀ» Á¦°øÇÕ´Ï´Ù.

      ret = gdbm_setopt(dbf, option, value, size)

 °¢°¢ÀÇ ÀÎÀÚÀÇ Àǹ̴ ´ÙÀ½°ú °°½À´Ï´Ù.

 GDBM_FILE dbf
   gdbm_open ¿¡¼­ ¸®ÅÏµÈ Æ÷ÀÎÅÍ

 int option
   ¼¼Æ®µÉ ¿É¼Ç

 int *value
   'option' ÀÌ ¼¼Æ®µÉ °ª¿¡ ´ëÇÑ Æ÷ÀÎÅÍ

 int size
   'value' ¿¡ ÀÇÇØ Æ÷ÀÎÅ͵Ǵ µ¥ÀÌÅÍÀÇ ±æÀÌ

 À¯È¿ÇÑ ¿É¼ÇÀº ´ÙÀ½°ú °°½À´Ï´Ù.

 GDBM_CACHESIZE - ³»ºÎ ¹öŶ ij½¬ »çÀÌÁ ¼³Á¤ÇÕ´Ï´Ù. ÀÌ ¿É¼ÇÀº GDBM_FILE
                  µð½ºÅ©·´Æ®´ç Çѹø¾¿¸¸ ¼³Á¤µÉ ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í µ¥ÀÌÅÍ
                  º£À̽º¸¦ óÀ½ Á¢±ÙÇÑ ÀÌÈķδ 100À¸·Î ÀÚµ¿À¸·Î ¼¼Æõ˴Ï
                  ´Ù.

 GDBM_FASTMODE -  fast mode ¸¦ ÄѰųª ²ü´Ï´Ù. ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé ÀÌ¹Ì ¿­·Á
               ¼­ È°¼ºÈ­µÈ µ¥ÀÌÅͺ£À̽º¿¡¼­ fast mode ¸¦ Åä±ÛÇÒ ¼ö ÀÖ½À
                  ´Ï´Ù.
                  value ´Â TRUE ³ª FALSE ·Î ¼¼ÆÃÇÕ´Ï´Ù.

 ÇÔ¼öÀÇ ¼öÇàÀÌ ½ÇÆеǾúÀ» ¶§¿¡´Â -1 ÀÌ ¸®ÅϵǸç, ¼º°øÀûÀÏ °æ¿ì¿¡´Â 0À» ¸®ÅÏ
 ÇÕ´Ï´Ù. ½ÇÆÐÇßÀ» °æ¿ì Àü¿ªº¯¼öÀÎ gdbm_errno °¡ ÀûÀýÇÏ°Ô ¼¼Æõ˴ϴÙ.

 ¿¹¸¦ µé¸é, gdbm_open À» »ç¿ëÇÏ¿© ÀÌ¹Ì ¿­·ÁÁ® ÀÖ´Â µ¥ÀÌÅÍ º£À̽º¸¦, ÀÌÀü¿¡´Â
 ¾î¶»°Ô Á¢±ÙµÇ¾ú´øÁö°£¿¡, Äɽ¬ 10À» »ç¿ëÇÏ¿© ¼¼ÆÃÇÑ´Ù¸é, ´ÙÀ½°ú °°Àº Äڵ尡
 µÉ°ÍÀÔ´Ï´Ù.

       int value = 10;
       ret = gdbm_setopt(dbf, GDBM_CACHESIZE, &value, sizeof(int));


 ÀÌÁ¦ gdbm ÀÇ 12°³ ÇÔ¼ö¸¦ ´Ù ¾Ë¾Æº¸¾Ò½À´Ï´Ù.

 ´ÙÀ½À¸·Î ±×¿ÜÀÇ °£´ÜÇÑ ¸î°¡Áö¸¦ ¾Ë¾Æº¸°Ú½À´Ï´Ù.

(´ÙÀ½ ÀåÀ¸·Î ³Ñ±â°Ú½À´Ï´Ù.)

¡º¸®´ª½º Çдç-¸®´ª½º °­Á / ¿¬Àç (go LINUX)¡» 469¹ø
Á¦  ¸ñ:DB¸¦ ÆíÇÏ°Ô, gdbm °­Á [02]                                 
¿Ã¸°ÀÌ:¿¥ºê¸®¿À(À¯Çü¸ñ  )    97/06/15 13:51    ÀÐÀ½:1639 °ü·ÃÀÚ·á ¾øÀ½
-----------------------------------------------------------------------------

Çѵ¿ÈÆ´ÔÀÇ gdbm °­ÁÂÀÔ´Ï´Ù.


-------------------------------------------------------------------


#621   Çѵ¿ÈÆ   (ddoch   )
[°­ÁÂ] DB¸¦ ÆíÇÏ°Ô, gdbm (2)                 06/02 20:16   499 line

GNU gdbm (GNU DataBase Manager) ÇÁ·Î±×·¡¹Ö °­Á (2)
----------------------------------------------------

4. ±×¿ÜÀÇ ´Ù¸¥ °Í

1) µÎ°¡Áö À¯¿ëÇÑ º¯¼ö

 * gdbm_error gdbm_errno

    ÀÌ º¯¼ö´Â gdbm ¿¡¼­ÀÇ ¿¡·¯¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.
    gdbm.h ¿¡ ÀÌ·¯ÇÑ ¿¡·¯ °ªµé¿¡ ´ëÇÑ Á¤ÀÇ°¡ µé¾î ÀÖ½À´Ï´Ù.

 * const char * gdbm_version

    ¹öÁ¯ Á¤º¸¸¦ °¡Áö°í ÀÖ´Â ¹®ÀÚ¿­ÀÔ´Ï´Ù.

2) UNIX Ç¥ÁØ dbm °ú ndbm °úÀÇ È£È¯¼º

 GNU 'dbm' (gdbm) ÆÄÀÏÀº ¾û¼ºÇÏÁö ¾Ê½À´Ï´Ù. ¿©·¯ºÐµéÀº UNIX 'cp' ¸í·ÉÀ» »ç¿ë
 ÇÏ¿© º¹»çÇÒ ¼ö ÀÖÀ¸¸ç, ¶ÇÇÑ º¹»çÇÏ´Â ÇÁ·Î¼¼½º°¡ È®ÀåÇÏÁöµµ ¾Ê½À´Ï´Ù.
 
 gdbm ÆÄÀÏÀº UNIX 'dbm' °ú 'ndbm' À» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥¿¡ À־ ȣȯ¸ðµå°¡
 ÀÖ½À´Ï´Ù.
 
 GNU 'dbm' Àº 'dbm' °ú ȣȯµÇ´Â ÇÔ¼ö¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. 'dbm' °úÀÇ È£È¯¼ºÀ»
 À§Çؼ­´Â, ¿©·¯ºÐµéÀº 'dbm.h'¸¦ Æ÷ÇÔÇØ¾ß ÇÕ´Ï´Ù.
 
 È£È¯ ¸ðµå¿¡ À־´Â, gdbm ÆÄÀÏ Æ÷ÀÎÅÍ°¡ »ç¿ëÀÚ¿¡°Ô ÇÊ¿äÄ¡ ¾ÊÀ¸¸ç, Çѹø
 ¿¡ ´Ü ÇϳªÀÇ ÆÄÀϸ¸ÀÌ ¿­¸± ¼ö ÀÖ½À´Ï´Ù. ȣȯ¸ðµå¿¡ À־ ¸ðµç »ç¿ëÀÚµéÀº   
 writer ·Î °£Áֵ˴ϴÙ. gdbm ÆÄÀÏÀÌ Àбâ¸ðµå¶ó¸é, ±×°ÍÀº writer ·Î¼­ ½ÇÆÐÇÒ
 °ÍÀ̳ª, reader ·Î¼­ ±×°ÍÀ» ¿­±â¸¦ ½ÃµµÇÒ °ÍÀÔ´Ï´Ù. µ¥ÀÌÅ͸¦ °¡¸£Å°´Â datum
 ±¸Á¶Á¦¿¡¼­ ¸®ÅÏµÈ ¸ðµç Æ÷ÀÎÅÍ´Â gdbm ÀÌ free¸¦ ÇÒ °ÍÀÔ´Ï´Ù. ±× Æ÷ÀÎÅ͵éÀº
 static Æ÷ÀÎÅÍ·Î Ãë±ÞµÇ¾î¾ß ÇÕ´Ï´Ù. Ç¥ÁØ UNIX 'dbm' ÀÌ ±×·±°Í ó·³ ¸»ÀÔ´Ï´Ù.
 È£È¯µÇ´Â ÇÔ¼öÀÇ À̸§Àº UNIX dbm ÇÔ¼öÀÇ À̸§°ú °°½À´Ï´Ù. ¾Æ·¡¿¡¼­ º¸ÀÌ´Â °Í
 Ã³·³....

    int dbminit(name);
    int store(key, content);
    datum fetch(key);
    int delete(key);
    datum firstkey();
    datum nextkey(key);
    int dbmclose();

 Ç¥ÁØ UNIX ÀÇ 'dbm' °ú GNU 'dbm' Àº ÆÄÀÏÀÇ µ¥ÀÌÅÍ ±¸Á¶°¡ ´Ù¸¨´Ï´Ù.
 * ¿©·¯ºÐµéÀº Ç¥ÁØ UNIX 'dbm' ÆÄÀÏÀ» GNU 'dbm' À¸·Î Á¢±ÙÇÒ ¼ö ¾ø½À´Ï´Ù.*
 ¸¸ÀÏ ¿©·¯ºÐµéÀÌ ¿À·¡µÈ µ¥ÀÌÅͺ£À̽º¸¦ GNU 'dbm' À¸·Î »ç¿ëÇÏ·Á¸é, ÀÌÀü¿¡
 'conv2gdbm' ÇÁ·Î±×·¥À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ('conv2gdbm' ÇÁ·Î±×·¥Àº gdbm ¼Ò½º
 ¹èÆ÷º»¿¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.)

 ¶ÇÇÑ, GNU 'dbm' Àº 'ndbm' °ú ȣȯµÇ´Â ÇÔ¼ö¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ndbm ȣȯ¼º
 ÇÔ¼ö¸¦ »ç¿ëÇÏ·Á¸é, Çì´õÆÄÀÏ 'ndbm.h' ¸¦ Æ÷ÇÔÇØ¾ß ÇÕ´Ï´Ù.

 'ndbm' °ú ¸¶Âù°¡Áö·Î, ¸ðµç ¸®ÅÏµÈ datum Àº static ½ºÅä·ÎÁö·Î °£Áֵ˴ϴÙ.
 µû¶ó¼­ ¿©·¯ºÐµéÀº ¸Þ¸ð¸®¸¦ free ÇÒ ÇÊ¿ä´Â ¾øÀ¸¸ç, 'ndbm' ¿Í ȣȯµÇ´Â ÇÔ¼ö
 µéÀÌ ±×·¯ÇÑ ÀÏÀ» ´ë½ÅÇÒ °ÍÀÔ´Ï´Ù.

 ±× ÇÔ¼öµéÀº ´ÙÀ½°ú °°½À´Ï´Ù.

    DBM *dbm_open(name, flags, mode);
    void dbm_close(file);
    datum dbm_fetch(file, key);
    int dbm_store(file, key, `content', flags);
    int dbm_delete(file, key);
    datum dbm_firstkey(file);
    datum dbm_nextkey(file);
    int dbm_error(file);
    int dbm_clearerr(file);
   int dbm_dirfno(file);
    int dbm_pagfno(file);
    int dbm_rdonly(file);

 ¸¸ÀÏ, UNIX 'dbm' À̳ª 'ndbm' À» »ç¿ëÇÑ ¿À·¡µÈ C ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇؼ­
 'gdbm' ÆÄÀÏÀ» »ç¿ëÇϱ⸦ ¿øÇÑ´Ù¸é, ´ÙÀ½ÀÇ 'cc' ¸í·É¾î¸¦ ½ÇÇàÇϼ¼¿ä.

    cc ... -L /usr/local/lib -lgdbm

 '-L/usr/local/lib' ´Â ¿©·¯ºÐµéÀÌ 'gdbm' ¶óÀ̺귯¸®¸¦ °¡Áö°í ÀÖ´Â Àå¼Ò¿¡
 µû¶ó ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù.

3) 'dbm' ÆÄÀÏÀ» 'gdbm' ÆÄÀÏ Æ÷¸ËÀ¸·Î º¯È¯Çϱâ

 'conv2gdbm' ÇÁ·Î±×·¥Àº 'dbm' µ¥ÀÌÅͺ£À̽º¸¦ 'gdbm' À¸·Î º¯È¯ÇÕ´Ï´Ù.
 »ç¿ë¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.

      conv2gdbm [-q] [-b block_size] dbm_file [gdbm_file]

 ¿É¼ÇÀº ´ÙÀ½°ú °°½À´Ï´Ù.

 -q
    conv2gdbm Àº Á¶¿ëÇÏ°Ô ÀÛ¾÷À» ¼öÇàÇϵµ·Ï ÇÕ´Ï´Ù.

 block_size
    gdbm_open ÀÇ block_size ¿Í °°½À´Ï´Ù.
 
 dbm_file
   '.pag' ³ª '.dir' È®ÀåÀÚ¸¦ ´ÞÁö ¾Ê´Â 'dbm' ÆÄÀÏÀÇ À̸§

 gdbm_file
   ¿ÏÀüÇÑ gdbm ÆÄÀÏÀÇ À̸§ÀÔ´Ï´Ù. ¸¸ÀÏ ÁöÁ¤ÇÏÁö ¾Ê¾Ò´Ù¸é, gdbm ÆÄÀÏÀÇ À̸§Àº
   dbm ÆÄÀÏÀ̸§¿¡¼­ È®ÀåÀÚ¸¦ »«°ÍÀ» ±âº»À¸·Î ÃëÇÕ´Ï´Ù.

   conv2gdbm dbmfile

  ÀÌ·¯ÇÑ »ç¿ë¿¹´Â 'dbmfile.pag' ³ª 'dbmfile.dir' À» 'gdbm' ÆÄÀÏÀÎ 'dbmfile'
  ·Î º¯È¯ÇÕ´Ï´Ù.

4) ¹ö±× ¸®Æ÷ÆÃ
 
 È¤½Ã GNU 'dbm' ¿¡ ¹ö±×°¡ ÀÖ´Ù¸é, ½ÅÁßÇÏ°Ô ÁøÂ¥ ¹ö±×ÀÎÁö¸¦ È®ÀÎÇϽðí, ¹ö±×
 ¸®Æ÷Æÿ¡ °ü·ÃµÈ ¹®¼­¸¦ Àо½Ã°í ¾Æ·¡ÀÇ ÁÖ¼Ò·Î ¿¬¶ôÀ» Áֽʽÿä.

    Internet: `bug-gnu-utils@prep.ai.mit.edu'.
    UUCP: `mit-eddie!prep.ai.mit.edu!bug-gnu-utils'.

 È¤½Ã, Á¦Àdzª Áú¹®, º»·¡ÀÇ ¿µ¹® info ÆÄÀÏ¿¡ ¹ö±×°¡ ÀÖ´Ù´øÁö Çؼ­ Á¦ÀÛÀÚ¿Í
 Á¢ÃËÇϽ÷Á¸é, ¾Æ·¡·Î ¿¬¶ôÇϽʽÿä.

       e-mail:  phil@cs.wwu.edu
       us-mail:  Philip A. Nelson
                 Computer Science Department
                 Western Washington University
                 Bellingham, WA 98226

 ¶ÇÇÑ, ¸ÞÀÎÅ×ÀÌ³Ê¿Í ¿¬¶ôÇϽ÷Á¸é ¾Æ·¡·Î ¿¬¶ôÇϽʽÿä.

       e-mail:  downsj@CSOS.ORST.EDU

5. ÇÁ·Î±×·¥À» Çѹø Â¥º¾½Ã´Ù.
 
gdbm ÀÇ ¼Ò½º ¹èÆ÷º» ¹èºÎ¿¡´Â Å×½ºÆ® ÇÁ·Î±×·¥ÀÌ 'gdbm' , 'dbm' , 'ndbm' º°·Î
Çϳª¾¿ µé¾î ÀÖ½À´Ï´Ù. ÀÌ°ÍÀ» ÂüÁ¶ÇÏ½Ã¸é µµ¿òÀÌ µÇ½Ç °Ì´Ï´Ù.
±× Å×½ºÆ® ÇÁ·Î±×·¥¿¡¼­´Â ¹®ÀÚ¿­·Î µÈ Å°Çϳª¿Í ¿ª½Ã ¹®ÀÚ¿­·Î µÈ µ¥ÀÌÅÍ Çϳª¸¸
À» ´Ù·ç°í ÀÖÁö¸¸ ÀÌ°ÍÀº ´õ¿í ´õ È®´ë°¡´ÉÇÕ´Ï´Ù.
¾Õ¼­µµ ¸»¾¸µå·ÈÁö¸¸, gdbm ÀÇ °¡Àå ±âº»ÀûÀÎ µ¥ÀÌÅÍÇüÀº ´ÙÀ½°ú °°½À´Ï´Ù.

       typedef struct {
         char *dptr;
         int  dsize;
       } datum;

 ÀÌ ±¸Á¶Ã¼´Â key ¿Í data °¡ ´Ù°°ÀÌ »ç¿ëÇÏ´Â ±¸Á¶Ã¼À̹ǷΠkey ¿Í data ÀÇ ±âº»
 ±¸Á¶´Â °°½À´Ï´Ù. ´Ù¸¸ dptr¿¡ ¾î¶² ÁÖ¼Ò¸¦ ÀúÀåÇÏ´À³Ä¿¡ µû¶ó¼­ ¿ëµµ°¡ ´Þ¶óÁö
 ¹Ç·Î Ç×»ó ±¸º°ÇϽñ⠹ٶø´Ï´Ù.

 dptr ÀÌ char * À̱ä ÇÏÁö¸¸ ¾ó¸¶µçÁö º¹ÀâÇÏ°í µ¢Ä¡ Å« ±¸Á¶Ã¼¶óµµ ±× ÁÖ¼Ò¸¦
 ÀúÀå ÇÒ ¼ö ÀÖ½À´Ï´Ù. °¡·É, ¿©·¯°¡ÁöÀÇ µ¥ÀÌÅÍ ÇüÀÌ µé¾î ÀÖ´Â SOME ¶ó´Â ±¸Á¶
 Ã¼°¡ ÀÖ´Ù¸é,

 typedef struct something {
   int a;
   char b;
   .....
 } SOME;

 datum data_data;
 SOME mine;
 data_data.dptr = &mine;
 data_data.dsize = sizeof(SOME);

 /* DB  open and some DB handle functions ... */

 printf("%d\n", ((CARD *)(data_data.dptr))->a);

 ÀÌ·± ½ÄÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Áï, datum ÀÌ dptr Àº char * ÀÌÁö¸¸ dptr ¸¸
 ÀÌÈÄ¿¡ Çüº¯È¯¸¸ ÇØÁÖ¸é ¾ó¸¶µçÁö ´Ù¸¥ ±¸Á¶Ã¼µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â À̾߱âÀÔ´Ï´Ù.

 gdbm À» »ç¿ëÇÏ¿© ÇÁ·Î±×·¥À» Â¥¸é, ¿ÜºÎ ÀÎÅÍÆäÀ̽º¸¸ ÀÌ¿ëÇÏ°Ô µÇ¹Ç·Î, ¼Ò½ºÀÇ
 ¿ë·®Àº »ó´çÈ÷ ÁÙ¾îµé°Ô µË´Ï´Ù. ´Ù¸¸ datum Çü º¯¼öµéÀÌ ¾î¶»°Ô »ç¿ëÇÏ¿´´ÂÁö
 ¸¸ Àß »ìÆ쳪°¡¸é º° ¹«¸®°¡ ¾ø½À´Ï´Ù.

 ÀÚ, ±×·³ ÀÌÁ¦ ÇÁ·Î±×·¥À» Çѹø Â¥º¼±î¿ä?

 gdbm À» »ç¿ëÇؼ­ ÇÁ·Î±×·¥À» © ¶§¿¡´Â key °¡ À¯ÀÏÇÑ °ªÀÌ µÇ¾î¾ß Çϱ⠶§¹®¿¡
 »çÀü¿¡ ¾î¶² °ªÀ» key ·Î »ç¿ëÇÒ °ÍÀÎÁö »ý°¢ÇÏ¼Å¾ß ÇÕ´Ï´Ù. 'key' °ªÀº ¾î¶²
 ÇüÅ°¡ µÇ¾î¾ß ÇÑ´Ù´Â Á¦ÇÑÀº ¾øÁö¸¸, °¡·É 'À̸§' °ú °°Àº °æ¿ì¿¡´Â ¾ó¸¶µçÁö
 °°¾ÆÁú ¼ö ÀÖÀ¸¹Ç·Î ÇÇÇØ¾ß ÇÕ´Ï´Ù. µû¶ó¼­, ¿¹Á¦ ÇÁ·Î±×·¥¿¡¼­´Â 'ÀϷùøÈ£'¸¦
 key ·Î »ç¿ëÇÏ°Ú½À´Ï´Ù.
 data ´Â, 'À̸§' °ú 'À̸ÞÀÏÁÖ¼Ò', 'ȸ»ç¸í', 'ÀüÈ­¹øÈ£', '»ß»ß¹øÈ£' ¸¦ °¡Áø
 CARD ¶ó´Â µ¥ÀÌÅÍ ÇüÀ» dptr·Î ÁöÁ¤À» Çؼ­ »ç¿ëÇÏ°Ú½À´Ï´Ù.

 ÇÁ·Î±×·¥Àº °£´ÜÇÑ ¸íÇÔ°ü¸® ÇÁ·Î±×·¥À¸·Î, °£´ÜÇÑ ÀÔ·Â, °Ë»ö, »èÁ¦, Ãâ·Â ¸¸
 À» Áö¿øÇÏ´Â °£´ÜÇÑ ±â´É¸¸ °®Ãß¾îÁ® ÀÖ½À´Ï´Ù. °Ë»ö ºÎºÐÀ» Á¶±Ý Ãß°¡ÇϽøé,
 Å° °ª¸¸ÀÌ ¾Æ´Ï¶ó °¢ CARD ÀÇ ¸â¹ö·Î °Ë»öµµ °¡´ÉÇÏ°Ô ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ±×¿Ü
 ÀÇ ±â´ÉÀº ¿©·¯ºÐµéÀÌ Çѹø Ãß°¡Çغ¸¼¼¿ä.

 ±×·³, ÇÁ·Î±×·¥À» »ìÆ캾½Ã´Ù.

-----------------------------------------------------------------------------

/* gdbm Å×½ºÆ® ÇÁ·Î±×·¥ : ¸íÇÔ°ü¸®
*
* Designed by Han-donghun, 1997.5.30
*
* name    : name.c
*
* Compile : gcc -o name name.c -lgdbm
* Usage   : name [database]
*
*           The default database is 'name.gdbm'.
*
* This is simple namecard manager program,
*       using gdbm.
*
*/

#include
#include
#include
#include    /* gdbm main header file*/

#define NAME_SIZE 40
#define EMAIL_SIZE  40
#define CORP_SIZE 40
#define TEL_SIZE  20
#define PAGER_SIZE 20

typedef struct _card {
 char name[NAME_SIZE];
 char email[EMAIL_SIZE];
 char corp[CORP_SIZE];
 char tel[TEL_SIZE];
 char pager[PAGER_SIZE];
} CARD;

CARD card;

/* key is 8 unique number  */
/* data is structured CARD */

void main(int argc, char *argv[]) {
 char *my_db = "name.gdbm";
 char cmd_ch;
 int done = 0;
 int cache_size = 100;
 GDBM_FILE dbf;
 datum key_data;
 datum data_data;
 datum return_data;
 char key_line[512];
 char data_line[512];

 /* Initialize variables. */
 key_data.dptr = NULL;
 data_data.dptr = NULL;

 if (argc >= 2) {
   my_db = argv[1];
 }

 dbf = gdbm_open(my_db, 2048, GDBM_WRCREAT, 00664, NULL);

 if (dbf == NULL) {
   printf("gdbm_open failed, %s\n", gdbm_strerror(gdbm_errno));
   exit(1);
 }
 if (gdbm_setopt(dbf, GDBM_CACHESIZE, &cache_size, sizeof(int)) == -1)
   {
   printf("gdbm_setopt failed, %s\n", gdbm_strerror(gdbm_errno));
   exit(1);
 }


 /* Welcome message. */
 printf("\nWelcome to the gdbm test program. Type ? for help.\n\n");
 while (!done) {
   printf("¸í  ·É => ");
   cmd_ch = getchar();
   if (cmd_ch != '\n') {
     char temp;
     do
       temp = getchar();
     while (temp != '\n' && temp != EOF);
   }
   if (cmd_ch == EOF) cmd_ch = 'q';
   switch (cmd_ch) {
     case '\n':
       printf("\n");
       break;

     case 'c': /* ¸íÇÔ °¹¼ö */
       {
          int temp;
         temp = 0;
         if (key_data.dptr != NULL) free (key_data.dptr);
         return_data = gdbm_firstkey (dbf);
         while (return_data.dptr != NULL) {
           temp++;
           key_data = return_data;
           return_data = gdbm_nextkey (dbf, key_data);
           free (key_data.dptr);
         }
         printf (" %d °³ÀÇ ¸íÇÔÀÌ ÀÖ½À´Ï´Ù.\n\n", temp);
         key_data.dptr = NULL;
       }
       break;

     case 'i': /* ¸íÇÔ ÀÔ·Â */
       if (key_data.dptr != NULL) free (key_data.dptr);

       printf("Å°     -> ");
       gets (key_line);
        key_data.dptr = key_line;
        key_data.dsize = strlen (key_line) + 1;  
        printf("ÀÌ  ¸§ -> ");
        gets(data_line);
        strncpy(card.name, data_line, NAME_SIZE-1);
        printf("À̸ÞÀÏ -> ");
        gets(data_line);
        strncpy(card.email, data_line, EMAIL_SIZE-1);
        printf("ȸ  »ç -> ");
        gets(data_line);
        strncpy(card.corp, data_line, CORP_SIZE);
        printf("Àü  È­ -> ");
        gets(data_line);
        strncpy(card.tel, data_line, TEL_SIZE);
        printf("»ß  »ß -> ");
        gets(data_line);
        strncpy(card.pager, data_line, PAGER_SIZE);

       data_data.dptr = (char *)&card;
       data_data.dsize = sizeof(CARD);
       if (gdbm_store (dbf, key_data, data_data, GDBM_REPLACE) != 0)
         printf ("¸íÇÔÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù.\n");
       printf ("\n");
       key_data.dptr = NULL;
       break;

     case 'd': /* ¸íÇÔ »èÁ¦ */
       if (key_data.dptr != NULL) free (key_data.dptr);
       printf ("Å°     -> ");
       gets (key_line);
       key_data.dptr = key_line;
        key_data.dsize = strlen (key_line)+1;
       if (gdbm_delete (dbf, key_data) != 0)
          printf ("ÇØ´ç µ¥ÀÌÅÍ°¡ ¾ø°Å³ª Áö¿ìÁö ¸øÇß½À´Ï´Ù.\n");
       printf ("\n");
       key_data.dptr = NULL;
       break;

     case 's': /* ¸íÇÔ °Ë»ö */
       if (key_data.dptr != NULL) free (key_data.dptr);
       printf("Å°     -> ");
       gets(key_line);
       key_data.dptr = key_line;
        key_data.dsize = strlen (key_line)+1;
        return_data = gdbm_fetch (dbf, key_data);
        if (return_data.dptr != NULL) {
         printf("\n");
         printf("Å°     : %s\n", key_line);
         printf("ÀÌ  ¸§ : %s\n", ((CARD *)(return_data.dptr))->name);
         printf("À̸ÞÀÏ : %s\n", ((CARD *)(return_data.dptr))->email);
         printf("ȸ  »ç : %s\n", ((CARD *)(return_data.dptr))->corp);
         printf("Àü  È­ : %s\n", ((CARD *)(return_data.dptr))->tel);
         printf("»ß  »ß : %s\n", ((CARD *)(return_data.dptr))->pager);
          printf("\n");
          free (return_data.dptr);
        }
        else
          printf ("¸íÇÔÀÌ ¾ø½À´Ï´Ù.\n\n");
       key_data.dptr = NULL;
       break;

     case 'l': /* ¸íÇÔ ¸ñ·Ï */
       if (key_data.dptr != NULL) free(key_data.dptr);
       key_data = gdbm_firstkey(dbf);
       while (key_data.dptr != NULL){
          printf("\n");
         return_data = gdbm_fetch(dbf, key_data);
         printf("Å°    : %s\n", key_data.dptr);
         printf("ÀÌ  ¸§: %s\n", ((CARD *)(return_data.dptr))->name);
         printf("À̸ÞÀÏ: %s\n", ((CARD *)(return_data.dptr))->email);
         printf("ȸ  »ç: %s\n", ((CARD *)(return_data.dptr))->corp);
         printf("Àü  È­: %s\n", ((CARD *)(return_data.dptr))->tel);
         printf("»ß  »ß: %s\n", ((CARD *)(return_data.dptr))->pager);
         free(return_data.dptr);
         return_data = gdbm_nextkey(dbf, key_data);
         free(key_data.dptr);
         key_data = return_data;
       }
       printf("\n");
       break;
     case 'q': /* Á¾·á */
       done = 1;
       break;

     case '?': /* µµ¿ò¸» */
     case 'h': /* µµ¿ò¸» */
       printf("\n");
       printf("c - ¸íÇÔ °¹¼ö\n");
       printf("d - ¸íÇÔ »èÁ¦\n");
       printf("s - ¸íÇÔ °Ë»ö\n");
       printf("i - ¸íÇÔ ÀÔ·Â\n");
       printf("l - ¸íÇÔ Àüü¸ñ·Ï\n");
       printf("q - Á¾     ·á\n");
       printf("\n");
       break;
   
     default:
       printf("Ʋ¸° ¸í·ÉÀÔ´Ï´Ù.\n\n");
       break;
   }
 } /* while (!done) */
 gdbm_close(dbf);
}

----------------------------------------------------------------------------

200 ¶óÀεµ ä µÇÁö ¾Ê´Â °£´ÜÇÑ ÇÁ·Î±×·¥ÀÔ´Ï´Ù.

´ÙÀ½Àº Å×½ºÆ® ³»¿ëÀÔ´Ï´Ù.

----------------------------------------------------------------------------

queen:~/gdbm$ name test.gdbm

Welcome to the gdbm test program. Type ? for help.

¸í  ·É => ?

c - ¸íÇÔ °¹¼ö
d - ¸íÇÔ »èÁ¦
s - ¸íÇÔ °Ë»ö
i - ¸íÇÔ ÀÔ·Â
l - ¸íÇÔ Àüü¸ñ·Ï
q - Á¾     ·á

¸í  ·É => i
Å°     -> 1
ÀÌ  ¸§ -> ¸®´ª¼­
À̸ÞÀÏ -> linuxer@linux.or.kr
ȸ  »ç -> FREE MAN
Àü  È­ -> 0000-1111-2222
»ß  »ß -> 012-3333-4444

¸í  ·É => i
Å°     -> 35
ÀÌ  ¸§ -> ¶ÇÄ¡
À̸ÞÀÏ -> ddoch@hitel.kol.co.kr
ȸ  »ç -> µÑ¸® ¿µÈ­ Ã⿬ Áß
Àü  È­ -> 0000-1111-5555
»ß  »ß -> 012-9999-8888

¸í  ·É => c
2 °³ÀÇ ¸íÇÔÀÌ ÀÖ½À´Ï´Ù.

¸í  ·É => l

Å°    : 1
ÀÌ  ¸§: ¸®´ª¼­
À̸ÞÀÏ: linuxer@linux.or.kr
ȸ  »ç: FREE MAN
Àü  È­: 0000-1111-2222
»ß  »ß: 012-3333-4444

Å°    : 35
ÀÌ  ¸§: ¶ÇÄ¡
À̸ÞÀÏ: ddoch@hitel.kol.co.kr
ȸ  »ç: µÑ¸® ¿µÈ­ Ã⿬ Áß
Àü  È­: 0000-1111-5555
»ß  »ß: 012-9999-8888

¸í  ·É => d
Å°     -> 35

¸í  ·É => l

Å°    : 1
ÀÌ  ¸§: ¸®´ª¼­
À̸ÞÀÏ: linuxer@linux.or.kr
ȸ  »ç: FREE MAN
Àü  È­: 0000-1111-2222
»ß  »ß: 012-3333-4444

¸í  ·É => c
1 °³ÀÇ ¸íÇÔÀÌ ÀÖ½À´Ï´Ù.

¸í  ·É => q
queen:~/gdbm$ ls -l test.gdbm
-rw-r--r--   1 ddoch     users        6469 May 30 21:32 test.gdbm
queen:~/gdbm$

----------------------------------------------------------------------------

»ç½Ç, gdbm Àº ´ëÇü DB ±¸Ãà¿¡ »ç¿ëÇϱ⿡´Â Á¶±Ý ºÎÁ·ÇÑ Á¡ÀÌ º¸ÀÔ´Ï´Ù.
key ¿Í data ÀÇ ¿¬°ü¼ºÀÌ ºÎÁ·ÇÑ ¸éÀÌ º¸À̸ç, key °ªÀ̳ª data ÀÇ °¢°¢ÀÇ Ç׸ñ
¿¡ µû¸¥ ¼øÂ÷ÀûÀÎ Á¤·ÄÀÇ ¹®Á¦¿¡ À־µµ »ý°¢ÇØ ºÁ¾ß ÇÒ Á¡ÀÌ ÀÖ´Ù°í º¾´Ï´Ù.

ÇÏÁö¸¸, ±×¿ÜÀÇ ´Ù¾çÇÑ ÀåÁ¡ÀÌ ÀÖÀ¸¹Ç·Î ÃæºÐÈ÷ È°¿ëÇÒ ¸¸ ÇÏ½Ç °Ì´Ï´Ù.
DB ¿¡ SQL À» »ç¿ëÇÏ´Â postgres ¿Í °°Àº ¿ÜºÎ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â °Íµµ Çϳª
ÀÇ ¹æ¹ýÀÌ µÇ°ÚÁö¿ä..

gdbm °­Á´ À̸¸ ÁÙÀ̵µ·Ï ÇÏ°Ú½À´Ï´Ù.

´ÙÀ½¿¡ ±âȸ°¡ µÈ´Ù¸é Á» ´õ ´Ù¾çÇÑ ºÐ¾ß¿¡ ´ëÇؼ­ ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.

±×·³, ´ÙÀ½ ½Ã°£±îÁö...

¶ÇÄ¡ Çѵ¿ÈÆ µå¸²

Modify Delete Post Reply Backward Forward List
Powered by Kang Jul Ki