[ 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Àå, ºÎ·ÏA, ºÎ·ÏB,C, ºÎ·ÏD, GNU C ¶óÀ̺귯¸® ¸ñ·Ï ]

À̱ÛÀº ÇÏÀÌÅÚ ¼ÒÇÁÆ®¿þ¾îµ¿È£È¸ÀÇ ¼Ò¸ðÀÓÀÎ Á÷ÀåÀÎÀ» À§ÇÑ ¾¾¸ðÀÓ¿¡¼­ ÀåÀå 2³â°£ÀÇ ´ëÀåÁ¤À¸·Î ¹ø¿ªµÇ¾îÁø ¹®¼­ÀÔ´Ï´Ù. Áö±ÝÀº Á÷¾¾ÀåÀ» Áö³»°í ÀÖ´Â ±è¼Ò¿µ(flpigy)´Ô°ú Á¶¿øºÀ(thirnine)´Ô, °í¼®°©´Ô(sukgab)ÀÇ °øµ¿¹ø¿ªÀÔ´Ï´Ù.

22. ÇÁ·Î¼¼½ºÀÇ ½Ãµ¿°ú Á¾·á

ÇÁ·Î¼¼½º´Â ½Ã½ºÅÛ ÀÚ¿øµéÀÇ ÇÒ´çÀ» À§ÇÑ ±âº»ÀûÀÎ µ¿ÀÛ ´ÜÀ§ÀÌ´Ù. °¢ ÇÁ·Î¼¼½º´Â ÀڽŸ¸ÀÇ ÁÖ¼Ò °ø°£(address space)°ú Á¦¾îÀÇ ÇÑ ¾²·¹µå¸¦ °®´Â´Ù. ÇÑ ÇÁ·Î¼¼½º´Â ÇÑ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù; ´ç½Å ÀÌ °°Àº ÇÁ·Î±×·¥À» ½ÇÇàÇϴµ¥ ¿©·¯°³ÀÇ ÇÁ·Î¼¼½º¸¦ °¡Áú ¼ö ÀÖÁö¸¸, °¢°¢ÀÇ ÇÁ·Î¼¼½º´Â ÀÚ½ÅÀÇ ÁÖ ¼Ò°ø°£¿¡¼­ ÀÚ½ÅÀÇ ÇÁ·Î±×·¥ º¹Á¦º»À» °®°í ´Ù¸¥ ÇÁ·Î±×·¥ º¹»çº»°ú µ¶¸³ÀûÀ¸·Î ½ÇÇàµÈ´Ù.

** ¿ªÀÚÁÖ : thread(¾²·¹µå) : ÇÁ·Î¼¼½º º¸´Ù ´õ ÀÛÀº ÇϳªÀÇ ÀÛ¾÷´ÜÀ§.

ÀϹÝÀûÀ¸·Î ¿ì¸®´Â ÇϳªÀÇ ÇÁ·Î¼¼½º¸¦ ´ÜÀ§·Î ÇÏ¿© µ¶¸³ÀûÀÎ ÀÛ¾÷À» ¼öÇàÇÏ´Â °ÍÀ¸·Î ¾Ë°í ÀÖÁö ¸¸, ÄÄÇ»ÅÍ ±â¼úÀÇ ¹ßÀüÀ¸·Î ÇÁ·Î¼¼½º¶ó´Â ´ÜÀ§´Â ³Ê¹«³ª Å« ´ÜÀ§°¡ µÇ¾î¹ö¸®°í À̸¦ ´ë½ÅÇÏ¿© ¾²·¹ µå¶ó´Â ´ÜÀ§°¡ »ç¿ëµÇ°Ô µÇ¾ú´Ù. ¾²·¹µå¸¦ »ç¿ëÇÏ´Â ¿î¿µÃ¼Á¦¿¡¼­´Â ÀÛ¾÷ÀÇ ½ºÄÉÁ층À» ¼öÇàÇÒ ¶§ ¾²·¹µå¸¦ ´ÜÀ§·Î ÇÏ¿© ½ºÄÉÁ층À» ÇÑ´Ù.

ÀÌ ÀåÀº ´ç½ÅÀÇ ÇÁ·Î±×·¥¿¡¼­ ÇÁ·Î¼¼½º¸¦ ½Ãµ¿Çϰí, ±×°ÍÀ» Á¾·á½Ã۰í, ºÎ¸ð ÇÁ·Î¼¼½º·ÎºÎÅÍ Á¤º¸ (Àμöµé°ú ȯ°æ)¸¦ ¹Þ±âÀ§Çؼ­´Â ¹«¾ùÀ» ÇØ¾ß¸¸ ÇÏ´ÂÁö¸¦ ¼³¸íÇϰí ÀÖ´Ù.

22.1 ÇÁ·Î±×·¥ Àμöµé.

½Ã½ºÅÛÀº main ÇÔ¼ö¸¦ È£ÃâÇÔÀ¸·Î½á C ÇÁ·Î±×·¥À» ½ÃÀÛÇÑ´Ù. ±×°ÍÀº ´ç½ÅÀÌ ÇÁ·Î±×·¥À» ¸¸µé ¶§ main À̶ó À̸§Áö¾îÁø ÇÔ¼ö¸¦ ²À ¸¸µé¾î¾ß ÇÔÀ» ÀǹÌÇϰí_±×°ÍÀ» ÇÏÁö ¾Ê¾ÒÀ» ¶§ ¿¡·¯¾øÀÌ ÇÁ·Î±× ·¥À» ¸µÅ©ÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù.

main ÇÔ¼ö´Â ¾Æ¹«·± Àμö¸¦ ÃëÇÏÁö ¾Ê°Å³ª, Ä¿¸àµå ¶óÀο¡¼­ ¹Þ¾ÆµéÀÌ´Â Àμö¸¦ ³ªÅ¸³»´Â µÎ °³ÀÇ Àμö¸¦ ÃëÇÑ´Ù. ´ÙÀ½Ã³·³.

int main (int argc, char *argv[])

Ä¿¸àµå ¶óÀÎ ÀμöµéÀº °ø¹éÀ¸·Î ºÐ¸®µÈ ÅäÅ«À¸·Î½á ÇÁ·Î±×·¥À» È£ÃâÇϵµ·Ï ½© Ä¿¸Çµå¿¡ ÁÖ¾îÁø´Ù; ±×·¡¼­, `cat foo bar'¶ó°í ÇßÀ» ¶§ Àμö´Â `foo' ¿Í `bar'°¡ µÈ´Ù. ¾î¶² ÇÁ·Î±×·¥¿¡¼­ Ä¿¸Çµå ¶óÀο¡ Àμö¸¦ ³Ö´Â ¹æ¹ýÀº ¿ÀÁ÷ mainÇÔ¼öÀÇ Àμö¸¦ ÅëÇØ¼­ °¡´ÉÇÏ´Ù. ¸¸ÀÏ main ÇÔ¼ö°¡ Àμö¸¦ ÃëÇÏÁö ¾Ê´Â´Ù¸é, ´ç½ÅÀº Ä¿¸Çµå ¶óÀο¡¼­ Àμö¸¦ ÃëÇÒ ¼ö ¾ø´Ù.

argc Àμö´Â Ä¿¸Çµå ¶óÀÎ ÀμöµéÀÇ °³¼ö¸¦ ¸»Çϰí, argv Àμö´Â C ¹®ÀÚ¿­ÀÇ º¤ÅÍÀÌ´Ù; argvÀÇ °¢ ¿ä¼ÒµéÀº °ø¹éÀ¸·Î ºÐ¸®µÈ °³º°ÀûÀÎ Ä¿¸Çµå ¶óÀÎ Àμö ¹®ÀÚ¿­ÀÌ´Ù. ½ÇÇà½ÃŰ·Á´Â ÇÁ·Î±×·¥ÀÇ ÆÄÀÏ À̸§ ¶ÇÇÑ Ã¹ ¹øÂ° ¿ä¼Ò·Î½á º¤Å;ȿ¡ Æ÷ÇԵȴÙ. argcÀÇ °ªÀº ÀÌ ¿ä¼ÒµéÀÇ °³¼öÀÌ´Ù. ³Î Æ÷ÀÎÅͰ¡ Ç×»ó ¸¶Áö¸· ¿ä¼Ò°¡ µÈ´Ù: Áï, argv[argc]´Â ³Î Æ÷ÀÎÅÍÀÌ´Ù. Ä¿¸Çµå `cat foo bar' ¿¡¼­, argc´Â 3À̰í, argv´Â "cat", "foo", ±×¸®°í "bar" ¶ó´Â ¼¼ °³ÀÇ ¿ä¼ÒµéÀ» °®´Â´Ù.

¸¸ÀÏ ´ç½ÅÀÇ ÇÁ·Î±×·¥¿¡¼­ Ä¿¸Çµå ¶óÀÎ ÀμöµéÀÇ ±¸ºÐÀÌ °£´ÜÇÏ´Ù¸é, ´ç½ÅÀº Á÷Á¢ argv·ÎºÎÅÍ °£´Ü ÇÏ°Ô Çϳª¾¿ Àμö¸¦ °¡Á®¿Ã ¼ö ÀÖ´Ù. ´ç½ÅÀÇ ÇÁ·Î±×·¥ÀÌ ÇÑÁ¤µÈ ÀμöµéÀÇ °³¼ö¸¦ °®Áö¾Ê°Å³ª, ¸ðµç ÀμöµéÀ» ÇѲ¨¹ø¿¡ ÃëÇÏÁö ¾Ê´Â´Ù¸é °°Àº ¹æ¹ýÀ¸·Î ÀμöµéÀ» ÃëÇÒ ¼ö ÀÖÁö¸¸, ±×·¸Áö ¾Ê´Ù¸é ±×°ÍÀ» ±¸¹®ºÐ¼® Çϱâ À§Çؼ­ getopt¸¦ »ç¿ëÇØ¼­ ÀμöµéÀ» ÃëÇØ¾ß ÇÒ °ÍÀÌ´Ù.

22.1.1 ÇÁ·Î±×·¥ Àμö ±¸¹® °ü·Êµé.

POSIX ¿¡¼­ Ä¿¸Çµå ¶óÀÎ ÀμöµéÀ» À§Çؼ­ ´ÙÀ½°ú °°Àº °ü·ÊµéÀ» ±ÇÀåÇϰí ÀÖ´Ù. getopt(22.1.2 [Parsing Options] 312 ÆäÀÌÁö ÂüÁ¶)´Â ´ÙÀ½ÀÇ ±ÇÀå»çÇ×À» ½±°Ô ÃæÁ·½Ã۵µ·Ï ¸¸µç´Ù.

둁 ÇÏÀÌÇÂ(hyphen (`_') ) ±¸È¹¹®ÀÚ(delimiter)·Î ½ÃÀÛÇÏ´Â ÀμöµéÀº ¿É¼ÇÀÌ ÀÖ´Ù.

둁 ÇÑ °³ÀÇ ÅäÅ«¿¡¼­ ÇÑ °³ÀÇ ÇÏÀÌÇ ±¸È¹¹®ÀÚ µÚ¿¡ µû¸£´Â °ÍÀº, ¸¸ÀÏ ±× ¿É¼ÇµéÀÌ ÀμöµéÀ» ÃëÇÏ Áö ¾Ê´Â´Ù¸é ´ÙÁß ¿É¼ÇÀÌ µÈ´Ù. ±×·¡¼­, `-abc'´Â `-a -b -c'¿Í µ¿µîÇÏ´Ù.

둁 ¿É¼Ç À̸§µéÀº ´ÜÀÏÇÑ ¾ËÆÄºª ¹®ÀÚµéÀÌ´Ù( isalnum¿¡ °üÇÏ¿©; 4.1Àý[Classification of Characters] 41 ÆäÀÌÁö ÂüÁ¶)

둁 ¾î¶² ¿É¼ÇµéÀ» Àμö¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ¿¹¸¦µé¾î, ld ¸í·ÉÀÇ `-o' ¿É¼ÇÀº Ãâ·Â ÆÄÀÏ À̸§À¸·Î ÇϳªÀÇ Àμö¸¦ ÇÊ¿ä·Î ÇÑ´Ù.

둁 ¿É¼Ç°ú ¿É¼ÇÀÌ ÇÊ¿ä·Î ÇÏ´Â ÀμöµéÀº ÅäÅ«À¸·Î ºÐ¸®µÇ¾î ³ªÅ¸³¯ ¼öµµ ÀÖ°í, ±×·¸Áö ¾ÊÀ» ¼öµµ ÀÖ ´Ù. (Áï, ±×µéÀ» ºÐ¸®ÇÏ´Â °ø¹é¹®ÀÚ´Â ¼±ÅÃÀû ÀÌ´Ù. ) ±×·¡¼­, `-o foo' ¿Í `-ofoo'´Â µ¿µîÇÑ´Ù.

둁 ¿É¼ÇµéÀº ÀüÇüÀûÀ¸·Î ´Ù¸¥ ºñ-¿É¼Ç Àμöµé¿¡ ¼±ÇàµÈ´Ù.

GNU C ¶óÀ̺귯¸®¿¡ ÀÖ´Â getoptÀÇ ±¸ÇöÀº ´ç½ÅÀÇ ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â »ç¿ëÀÚ°¡ ½ÉÁö¾î ¿É¼Ç°ú ºñ-¿É¼Ç ÀμöµéÀ» È¥ÇÕÇßÀ»Áö¶óµµ, ±¸¹®ºÐ¼®À» À§Çؼ­ ¸ðµç ºñ-¿É¼Ç ÀμöµéÀü¿¡ ¿É¼Ç ÀμöµéÀÌ ³ªÅ¸ ³ªµµ·Ï ¸¸µç´Ù.

둁 Àμö `--'´Â ¸ðµç ¿É¼ÇµéÀ» Á¾°á½ÃŲ´Ù; ´ÙÀ½¿¡ µû¸£´Â ÀμöµéÀº ±×µéÀÌ ÇÏÀÌÇÂÀ¸·Î ½ÃÀÛÇÒÁö¶ó µµ, ºñ-¿É¼Ç Àμöµé·Î Ãë±ÞµÈ´Ù.

둁 ÇÑ °³ÀÇ ÇÏÀÌÇ ¹®ÀÚ°¡ µé¾î°¡ÀÖ´Â ÅäÅ«Àº º¸Åë ºñ-¿É¼Ç Àμö·Î½á Ãë±ÞµÈ´Ù. °ü·Ê»ó, ±×°ÍÀº ±â º» ÀԷ°ú Ãâ·Â ½ºÆ®¸²À¸·Î ÀÔ·ÂÀ̳ª Ãâ·ÂÀ» Á¤Çϱâ À§Çؼ­ »ç¿ëµÈ´Ù.

둁 ¿É¼ÇµéÀº ¾î¶² ¼ø¼­´ë·Î °ø±ÞµÇ¾îÁö°í, ¶Ç´Â ¿©·¯¹ø Áߺ¹Çؼ­ ³ªÅ¸³ª±âµµ ÇÒ °ÍÀÌ´Ù. ÇØ¼®Àº Ư Á¤ÇÑ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¸Ç ¿ÞÂÊ¿¡ ÀÖ´Ù°í ÇØ¼®ÇÑ´Ù.

GNU ´Â ±×µéÀÇ °ü·Ê¿¡ µû¶ó¼­ ±ä ¿É¼ÇÀ» ´õÇÑ´Ù. ±ä ¿É¼ÇµéÀº `--'µÚ¿¡ µû¸£´Â À̸§À¸·Î ±¸¼ºµÇ ´Âµ¥ ±× À̸§Àº ¿µ¼ýÀÚ¿Í ´ë½¬µé·Î ±¸¼ºµÈ´Ù. ¿É¼Ç À̸§µéÀº ÀüÇüÀûÀ¸·Î Çϳª¿¡¼­ ¼¼ °³ ´Ü¾îÀÇ ±æ À̸¦ °®°í, ±×µéÀº ÇÏÀÌÇÂÀ¸·Î ´Ü¾îµéÀ» ºÐ¸®ÇÑ´Ù. »ç¿ëÀÚµéÀº ¿É¼ÇÀ» ´ëÇ¥ÇÏ´Â ¾àÀÚ°¡ ´ÜÀÏ ÇÏ´Ù¸é ¾ó¸¶µçÁö ¿É¼ÇÀ̸§µéÀ» Ãà¾àÇÒ ¼ö ÀÖ´Ù. ÇÑ °³ÀÇ ±ä ¿É¼ÇÀ» À§ÇÑ Àμö¸¦ Á¤ÇϱâÀ§Çؼ­´Â, `--name=value'¶ó°í ½á¶ó. ÀÌ ±¸¹®Àº ¼±ÅÃÀûÀÎ Àμö¸¦ ¹Þ¾ÆµéÀÌ´Â ±ä ¿É¼ÇÀ» °¡´ÉÇϰÔÇÑ´Ù. GNU ½Ã½ºÅÛÀº ½©¿¡¼­ ±ä ¿É¼Ç À̸§À» Áö¿øÇÒ °ÍÀÌ´Ù.

22.1.2 ÇÁ·Î±×·¥ ¿É¼ÇµéÀ» ±¸¹®ºÐ¼®Çϱâ.

À̹ø¿¡´Â getopt ÇÔ¼ö¸¦ ¾î¶»°Ô È£ÃâÇÏ´ÂÁö¿¡ ´ëÇØ¼­ ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù. ÀÌ ±â´ÉÀ» »ç¿ëÇϱâ À§Çؼ­, ´ç½ÅÀÇ ÇÁ·Î±×·¥¿¡ Çì´õÆÄÀÏ `unistd.h'À» Æ÷ÇÔ½ÃÄѾ߸¸ ÇÑ´Ù.

º¯¼ö : int opterr

¸¸ÀÏ ÀÌ º¯¼öÀÇ °ªÀÌ 0ÀÌ ¾Æ´Ï¸é, getopt´Â ¸¸ÀÏ ¾ËÁö¸øÇÏ´Â ¿É¼Ç ¹®ÀÚ°¡ µé¾î¿À°Å³ª Àμö¸¦ ÇÊ¿ä·Î ÇÏ´Â ¿É¼ÇÀÌ ¿É¼ÇÀ» °®°íÀÖÁö ¾Ê´Ù¸é Ç¥ÁØ ¿¡·¯ ½ºÆ®¸²¿¡ ¿¡·¯¸Þ¼¼Áö¸¦ ÇÁ¸°Æ®ÇÑ´Ù. À̰ÍÀº µðÆúÆ® µ¿ÀÛÀÌ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ÀÌ º¯¼ö¸¦ 0À¸·Î ¼³Á¤Çϸé, getopt´Â ¾Æ¹«·± ¸Þ½ÃÁöµµ ÇÁ¸°Æ®ÇÏÁö´Â ¾ÊÁö¸¸, ¿¡·¯¸¦ ÁöÀûÇϱâ À§Çؼ­ ¿©ÀüÈ÷ ? ¹®ÀÚ¸¦ ¿©ÀüÈ÷ ¸®ÅÏÇÑ´Ù.

º¯¼ö : int optopt

getopt°¡ ¾Ë·ÁÁöÁö ¾ÊÀº ¿É¼Ç ¹®ÀÚ¿Í ¸¸³ª°Å³ª ÇÊ¿äÇÑ Àμö°¡ ºüÁ®ÀÖ´Â ¿É¼ÇÀÏ ¶§, getopt´Â ±× ¿É¼Ç ¹®ÀÚ¸¦ ÀÌ º¯¼ö¿¡ ÀúÀåÇÑ´Ù. ´ç½ÅÀº ÀڽŸ¸ÀÇ Áø´Ü ¸Þ½ÃÁö¸¦ Á¦°øÇϱâ ÀÌÇØ¼­ ÀÌ º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

º¯¼ö : int optind

ÀÌ º¯¼ö´Â ¾ÕÀ¸·Î ºÐ¼®ÇÒ ¹è¿­ argvÀÇ ´ÙÀ½ ¿ä¼Ò¿¡ ´ëÇÑ À妽º·Î getopt¿¡ ÀÇÇØ ¼³Á¤µÈ´Ù. ÀÏ´Ü getopt°¡ ¿É¼Ç Àμöµé ¸ðµÎ¸¦ ¹ß°ßÇß´Ù¸é, ´ç½ÅÀº ³ª¸ÓÁö ºñ-¿É¼Ç ÀμöµéÀÌ ¾îµð¿¡¼­ ½ÃÀÛÇÏ´ÂÁö °á Á¤Çϱâ À§Çؼ­ ÀÌ º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ º¯¼öÀÇ ÃʱⰪÀº 1ÀÌ´Ù.

º¯¼ö : chat *optarg

ÀÌ º¯¼ö´Â ÀμöµéÀ» ¹Þ¾ÆµéÀÌ´Â ¿É¼ÇµéÀ» À§Çؼ­, ¿É¼Ç ÀμöµéÀÇ °ªÀ» °¡¸®Å°´Â Æ÷ÀÎÅͷνá getopt ¿¡ ÀÇÇØ ¼³Á¤µÈ´Ù.

ÇÔ¼ö : int getopt(int argc, char **argv, const char *options)

getopt ÇÔ¼ö´Â argv¿Í argc Àμöµé¿¡ÀÇÇØ ÁöÁ¤µÈ Àμö ¸ñ·ÏÀ¸·ÎºÎÅÍ ´ÙÀ½ ¿É¼Ç Àμö¸¦ ¾ò´Â´Ù. º¸ Åë, ±×µé °ªµéÀº main¿¡ ÀÇÇØ ¹Þ¾Æ µé¿©Áø Àμöµé·ÎºÎÅÍ Á÷Á¢ÀûÀ¸·Î ¿Â´Ù. ¿É¼Ç Àμö´Â ÀÌ ÇÁ·Î±× ·¥¿¡¼­ À¯¿ëÇÏ°Ô ¾²ÀÏ ¿É¼Ç ¹®ÀÚµéÀ» ÁöÁ¤ÇÑ ¹®ÀÚ¿­ÀÌ´Ù. ¹®ÀÚ¿­¾È¿¡ ÀÖ´Â ¿É¼Ç ¹®ÀÚ´Â Àμö°¡ ÇÊ ¿äÇÔÀ» ¾Ë¸®±â À§Çؼ­ ÄÝ·Ð(`:')ÀÇ ´ÙÀ½¿¡ ³ªÅ¸³­´Ù.

¸¸ÀÏ ¿É¼Ç Àμö ¹®ÀÚ¿­ÀÌ ÇÏÀÌÇÂ(`-')À¸·Î ½ÃÀÛÇÑ´Ù¸é, À̰ÍÀº Ưº°ÇÏ°Ô Ãë±ÞµÈ´Ù. ±×µéÀº ¿É¼Ç ¹® ÀÚ°¡ `\0'ÀΰÍó·³ ¸®ÅϵǾî, ¿É¼ÇÀÌ ¾ø´Â ÀμöµéÀ» Çã¿ëÇÑ´Ù. getopt ÇÔ¼ö´Â ´ÙÀ½ Ä¿¸Çµå ¶óÀÎ¿É¼Ç ÀÇ ¿É¼Ç ¹®ÀÚ¸¦ ¸®ÅÏÇÑ´Ù. ´õ ÀÌ»ó À¯¿ëÇÑ ¿É¼Ç ÀμöµéÀÌ ¾øÀ» ¶§, -1À» ¸®ÅÏÇÑ´Ù. ±×°÷Àº ÀÌÁ¦ ºñ -¿É¼Ç ÀμöµéÀÌ ÀÖÀ» °ÍÀÌ´Ù; ´ç½ÅÀº À̰ÍÀ» üũÇϱâ À§Çؼ­ argc ÆÄ¶ó¹ÌÅÍ¿¡ ´ëÀÀÇÏ´Â

¿ÜºÎº¯¼ö optind¸¦ ºñ±³Çؾ߸¸ ÇÑ´Ù.

¸¸ÀÏ ¾î¶² ¿É¼ÇÀÌ Àμö¸¦ °¡Áø´Ù¸é, getopt ´Â º¯¼öµé optarg¾È¿¡ ±×°ÍÀ» ÀúÀåÇÔÀ¸·Î½á Àμö¸¦ ¸®ÅÏ ÇÑ´Ù. ´ç½ÅÀÌ µ¡¾º¿öÁúÁöµµ ¸ð¸£´Â Á¤Àû º¯¼ö°¡ ¾Æ´Ñ, º¸ÅëÀÇ argv ¹è¿­À» °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ ¶ó¸é, optarg ¹®ÀÚ¿­À» º¹»çÇÒ Çʿ䰡 ¾ø´Ù.

¸¸ÀÏ ¾Ë·ÁÁöÁö ¾ÊÀº ¿É¼Ç¹®ÀÚ¸¦ »ç¿ëÇϰųª, ¿É¼Ç Àμö°¡ ºüÁ®ÀÖ´Ù¸é getopt´Â `?'¸¦ ¸®ÅÏÇϰí ÇöÀç ¿É¼Ç ¹®ÀÚ·Î ¿ÜºÎº¯¼ö optopt¸¦ ¼³Á¤ÇÑ´Ù. ¸¸ÀÏ ¿É¼ÇÀÇ Ã¹ ¹øÂ° ¹®ÀÚ°¡ ÄÝ·Ð(`:') À̶ó¸é, getopt´Â ¿É¼Ç Àμö°¡ ºüÁ®ÀÖÀ½À» ¾Ë¸®±â À§Çؼ­ `?' ´ë½Å¿¡ `:'¸¦ ¸®ÅÏÇÑ´Ù. ¶ÇÇÑ, ¸¸ÀÏ ¿ÜºÎº¯¼ö opterrÀÌ 0 ÀÌ ¾Æ´Ï¸é(µðÆúÆ®ÀÌ´Ù.), getopt´Â ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù.

22.1.3 getopt¸¦ »ç¿ëÇØ¼­ Àμö¸¦ ±¸¹®ºÐ¼®ÇÏ´Â ¿¹Á¦.

´ÙÀ½Àº getopt°¡ ÀüÇüÀûÀ¸·Î ¾î¶»°Ô »ç¿ëµÇ´ÂÁö¸¦ º¸¿©ÁÖ´Â ¿¹Á¦ÀÌ´Ù. ÇÙ½ÉÀº ´ÙÀ½°ú °°´Ù:

둁 º¸Åë, getopt´Â ·çÇÁ¾È¿¡¼­ È£ÃâµÈ´Ù. getopt°¡ ´õ ÀÌ»ó ³ªÅ¸³­ ¿É¼ÇÀÌ ¾øÀ½À» ¾Ë¸®±â À§Çؼ­ -1 À» ¸®ÅÏÇϸé, ·çÇÁ´Â Á¾·áÇÑ´Ù.

둁 switch ±¸¹®Àº getopt·ÎºÎÅÍÀÇ ¸®Åϰª¿¡ µû¸¥ °¢°¢ÀÇ Ã³¸®¿¡ »ç¿ëµÈ´Ù. °¢°¢ÀÇ °æ¿ì´Â ÇÁ·Î±×·¥¿¡ ¼­ ³ªÁß¿¡ »ç¿ëµÉ º¯¼ö¸¦ ¼³Á¤ÇÏ°Ô µÈ´Ù.

둁 µÎ ¹øÂ° ·çÇÁ´Â ³²¾ÆÀÖ´Â ºñ-¿É¼Ç ÀμöµéÀ» ó¸®Çϴµ¥ »ç¿ëµÈ´Ù.

#include <unistd.h>

#include <stdio.h>

int

main (int argc, char **argv)

{

int aflag = 0;

int bflag = 0;

char *cvalue = NULL;

int index;

int c;

opterr = 0;

while ((c = getopt (argc, argv, "abc:")) != -1)

switch (c)

{

case 'a':

aflag = 1;

break;

case 'b':

bflag = 1;

break;

case 'c':

cvalue = optarg;

break;

case '?':

if (isprint (optopt))

fprintf(stderr, "Unknown option `-%c'.\n", optopt);

else

fprintf (stderr,

"Unknown option character `\\x%x'.\n", optopt);

return 1;

default:

abort ();

}

printf("aflag = %d, bflag = %d, cvalue = %s\n", aflag, bflag, cvalue);

for (index = optind; index < argc; index++)

printf ("Non-option argument %s\n", argv[index]);

return 0;

}

´ÙÀ½Àº À§ÀÇ ÇÁ·Î±×·¥À» ¿©·¯ °¡Áö ÀμöµéÀÇ Á¶ÇÕÀ» »ç¿ëÇßÀ» ¶§ ¾î¶² °á°ú¸¦ ³ªÅ¸³»´ÂÁö¿¡ ´ëÇÑ ¿¹ÀÌ´Ù.

% testopt

aflag = 0, bflag = 0, cvalue = (null)

% testopt -a -b

aflag = 1, bflag = 1, cvalue = (null)

% testopt -ab

aflag = 1, bflag = 1, cvalue = (null)

% testopt -c foo

aflag = 0, bflag = 0, cvalue = foo

% testopt -cfoo

aflag = 0, bflag = 0, cvalue = foo

% testopt arg1

aflag = 0, bflag = 0, cvalue = (null)

Non-option argument arg1

% testopt -a arg1

aflag = 1, bflag = 0, cvalue = (null)

Non-option argument arg1

% testopt -c foo arg1

aflag = 0, bflag = 0, cvalue = foo

Non-option argument arg1

% testopt -a -- -b

aflag = 1, bflag = 0, cvalue = (null)

Non-option argument -b

% testopt -a -

aflag = 1, bflag = 0, cvalue = (null)

Non-option argument -

22.1.4 ±ä ¿É¼ÇµéÀ» ±¸¹®ºÐ¼®Çϱâ.

´ÜÀÏÇÑ-¹®ÀÚ ¿É¼Çµé·Î¸¸ µÇ¾îÀÖ´Â GNU-½ºÅ¸ÀÏÀÇ ±ä ¿É¼ÇµéÀ» ¹Þ¾ÆµéÀ̱â À§Çؼ­´Â getopt ´ë½Å¿¡ getopt_long¸¦ »ç¿ëÇÑ´Ù. ´ç½ÅÀº ÀÌ·± °¡¿ÜÀÇ ÀÛÀº ÀÛ¾÷À» ÅëÇØ¼­ ¸ðµç ÇÁ·Î±×·¥ÀÌ ±ä ¿É¼ÇµéÀ» ¹Þ ¾ÆµéÀÌ°Ô ¸¸µé ¼ö ÀÖ°í, Ãʺ¸Àڵ鿡°Ô ¾î¶»°Ô ±× ÇÁ·Î±×·¥À» »ç¿ëÇÏ´ÂÁö µµ¿ï ¼öÀÖ´Ù.

µ¥ÀÌÅÍ Å¸ÀÔ : struct option

ÀÌ ±¸Á¶Ã¼´Â getopt_longÀ» À§ÇÑ ´ÜÀÏÇÑ ±ä ¿É¼Ç À̸§À» ¼³¸íÇÑ´Ù. ±ä ¿É¼ÇÀ» ±¸¼ºÇÏ´Â ¿É¼ÇÀÇ Çϳª ÀÎ Àμö longopts´Â ±×µé ±¸Á¶Ã¼ÀÇ ¹è¿­ÀÌ µÇ¾î¾ß¸¸ ÇÑ´Ù. ±× ¹è¿­Àº 0À¸·Î ä¿öÁø ¿ä¼Ò·Î½á ³¡³­ ´Ù. struct option ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°Àº Çʵ带 °®´Â´Ù.

const char *name

ÀÌ Çʵå´Â ¿É¼ÇÀÇ À̸§À¸·Î ¹®ÀÚ¿­ÀÌ´Ù.

int has_arg

ÀÌ Çʵå´Â ¿É¼ÇÀÌ Àμö¸¦ ÃëÇÏ´ÂÁö ¶Ç´Â ÃëÇÏÁö ¾Ê´ÂÁöÀÇ ¿©ºÎ¸¦ ¾Ë¸°´Ù. ±×°ÍÀº Á¤¼öÀÌ°í ±×°÷¿¡ ¼¼ °³ÀÇ ÇÕ¸®ÀûÀÎ °ªµéÀÌ ÀÖ´Ù: no_argument, required argument, ±×¸®°í optional_argument

int *flag

int val

ÀÌ ÇʵåµéÀº ±× ¿É¼ÇÀÌ ¹ß»ýÇÒ ¶§ ¿É¼Ç¿¡ ´ëÇÏ¿© ¾î¶»°Ô º¸°í¸¦ Çϰųª µ¿ÀÛÇÒ°ÍÀÎÁö¸¦ Á¦¾îÇÑ´Ù. ¸¸ÀÏ flag°¡ ³Î Æ÷ÀÎÅͶó¸é, valÀº ÀÌ ¿É¼ÇÀ» ´ëÇ¥ÇÏ´Â °ªÀÌ´Ù. Á¾Á¾ ±× °ªµéÀº ƯÁ¤ÇÑ ±ä ¿É¼ÇµéÀÇ ´ÜÀÏÇÔÀ» È®ÀÎÇϱâ À§Çؼ­ ¼±ÅõǾîÁø´Ù. ¸¸ÀÏ Ç÷¡±×°¡ ³Î Æ÷ÀÎÅͰ¡ ¾Æ´Ï¶ó¸é, ±×°ÍÀº ÀÌ ¿É¼ÇÀ» À§ÇÑ Ç÷¡±×ÀÎ intÇü º¯¼öÀÇ ÁÖ¼Ò°¡ µÇ¾îÁú °ÍÀÌ´Ù. val¾ÈÀÇ °ªÀº ³ªÅ¸³­ ¿É¼ÇÀ» ÁöÀûÇϵµ·Ï Ç÷¡±× ¾È¿¡ ÀúÀåÇϱâ À§ÇÑ °ªÀÌ´Ù.

ÇÔ¼ö :

int getopt__long (int argc, char **argv, const char *shortopts, struct option *longopts, int *indexptr)

º¤ÅÍ argv ( ±æÀÌ´Â argcÀÌ´Ù.)·ÎºÎÅÍ ¿É¼ÇµéÀ» ÇØµ¶ÇÑ´Ù. Àμö shortopts´Â getopt°¡ ÇØµ¶ÇÒ ¼ö ÀÖ ´Â ¸¸Å­ÀÇ ÂªÀº ¿É¼ÇÀ» ³ªÅ¸³»°í, Àμö longopts´Â ¹Þ¾ÆµéÀ̱â À§ÇÑ ±ä ¿É¼ÇµéÀ» ³ªÅ¸³½´Ù. getopt_longÀÌ ÂªÀº ¿É¼ÇÀ» ¸¸³µÀ» ¶§, ±×°ÍÀº getopt°¡ Çϴ°Ͱú °°Àº ÀÏÀ» ÇÑ´Ù: ±×°ÍÀº ¿É¼ÇÀ» À§ ÇÑ ¹®ÀÚ Äڵ带 ¸®ÅÏÇϰí, optarg¿¡ ¿É¼Ç ÀμöµéÀ»(¸¸ÀÏ ±×°ÍÀÌÇÑ °³¸¦ °¡Áø´Ù¸é) ÀúÀåÇÑ´Ù.

getopt_long°¡ ±ä ¿É¼ÇÀ» ¸¸³µÀ» ¶§, ±×°ÍÀº ±× ¿É¼ÇÀ» Á¤ÀÇÇÏ´Â flag ¿Í val Çʵ忡 ±âÃÊÇÑ µ¿ÀÛµé À» ÃëÇÑ´Ù.

¸¸ÀÏ flag°¡ ³Î Æ÷ÀÎÅͶó¸é, getopt_long Àº ¹ß°ßÇÑ ¿É¼ÇÀ» ÁöÀûÇϵµ·Ï valÀÇ ³»¿ëÀ» ¸®ÅÏÇÑ´Ù. ´ç½Å ÀÌ ´Ù¸¥ Àǹ̸¦ °¡Áø ¿É¼ÇÀ» À§Çؼ­ val Çʵå¾È¿¡ º°°³ÀÇ °ªµéÀ» ¹è¿­Çϸé, ´ç½ÅÀº getopt_longÀÌ ¸® ÅÏÇÑ ÈÄ¿¡ ±×µé °ªÀ» ÇØµ¶ÇÒ ¼ö ÀÖ´Ù. ¸¸ÀÏ ±ä ¿É¼ÇÀÌ ÂªÀº ¿É¼Ç°ú µ¿ÀÏÇÏ´Ù¸é, ´ç½ÅÀº ¬Àº ¿É¼ÇÀÇ ¹®ÀÚ Äڵ带 »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¸¸ÀÏ flag°¡ ³Î Æ÷ÀÎÅͰ¡ ¾Æ´Ï¶ó¸é, ´ÜÁö ÇÁ·Î±×·¥¾È¿¡¼­ flag°¡ ¼³Á¤µÈ ÀÌ ¿É¼ÇÀ» ÀǹÌÇÑ´Ù. flag´Â ´ç½ÅÀÌ Á¤ÀÇÇÑ intÇüÀÇ º¯¼öÀÌ´Ù. flag Çʵå¾È¿¡ ±× Ç÷¡±×ÀÇ ÁÖ¼Ò¸¦ ÀúÀåÇ϶ó. flag¿¡ ÀúÀåÇÏ·Á´Â ¿É¼Ç°ªÀ» val Çʵå¾È¿¡ ÀúÀåÇ϶ó. ÀÌ °æ¿ì, getopt_long´Â0À» ¸®ÅÏÇÑ´Ù.

¾î¶² ±ä ¿É¼Ç¿¡¼­, getopt_long´Â ¹è¿­ longopts¾ÈÀÇ ¿É¼Ç Á¤ÀÇ¿¡ ´ëÇÑ À妽º¸¦, *indexptr¿¡ ÀúÀåÇÏ ¿© ¾Ë¸°´Ù. ´ç½ÅÀº longopts[*indexptr].name À¸·Î ¿É¼ÇÀÇ À̸§À» ¾òÀ» ¼ö ÀÖ´Ù. ±×·¡¼­ ´ç½ÅÀº ±×µé ÀÇ val Çʵå¾È¿¡ ÀÖ´Â °ªÀ̳ª, ±×µéÀÇ À妽º¿¡ ÀÇÇØ¼­ ±ä ¿É¼ÇµéÀ» ±¸ºÐÇÒ ¼ö ÀÖ´Ù. ´ç½ÅÀº Ç÷¡±× ¸¦ ¼³Á¤ÇÑ ±ä ¿É¼ÇµéÀ» ÀÌ ¹æ¹ýÀ¸·Î ±¸ºÐÇÒ ¼ö ÀÖ´Ù.

¾î¶² ±ä ¿É¼ÇÀÌ Àμö¸¦ °¡Áú ¶§, getopt_long´Â ¸®ÅÏÇϱâ Àü¿¡ º¯¼ö optarg¾È¿¡ Àμö°ªÀ» ÀúÀåÇÑ´Ù. ¾î¶² ¿É¼ÇÀÌ ¾Æ¹«·± Àμö¸¦ °¡ÁöÁö ¾ÊÀ» ¶§, optarg¾ÈÀÇ °ªÀº ³Î Æ÷ÀÎÅÍÀÌ´Ù. À̰ÍÀº °ø±ÞµÈÀμö°¡ ¿É¼ÇÀ» °¡Á³´ÂÁö ¾Æ´ÑÁö¿¡ ´ëÇÑ ¿©ºÎ¸¦ ´ç½Å¿¡°Ô ¾Ë¸®´Â ¹æ¹ýÀÎ °ÍÀÌ´Ù. getopt_long´Â ´õ ÀÌ»ó ó ¸®ÇÒ ¿É¼ÇµéÀÌ ¾øÀ» ¶§, -1À» ¸®ÅÏÇϰí, ´ÙÀ½ ³²¾ÆÀÖ´Â ÀμöÀÇ argv À妽º¸¦ º¯¼ö optind ¾È¿¡ ³²±ä ´Ù.

22.1.5 ±ä ¿É¼ÇµéÀÇ ±¸ºÐºÐ¼®¿¡ ´ëÇÑ ¿¹Á¦.

#include <stdio.h>

/* Ç÷¡±×´Â `--verbose' ¿¡ ÀÇÇØ ¼³Á¤ÇÑ´Ù. */

static int verbose_flag;

int

main (argc, argv)

int argc;

char **argv;

{

int c;

while (1)

{

static struct option long_options[] =

{

/* ±×µé ¿É¼ÇµéÀº Ç÷¡±×¸¦ ¼³Á¤ÇÑ´Ù.*/

{"verbose", 0, &verbose_flag, 1},

{"brief", 0, &verbose_flag, 0},

/* ±×µé ¿É¼ÇµéÀº Ç÷¡±×¸¦ ¼³Á¤ÇÏÁö ¾Ê´Â´Ù. ¿ì¸®´Â ±×µéÀÇ À妽º¿¡ ÀÇÇØ ±×µéÀ» ±¸ºÐÇÑ´Ù. */

{"add", 1, 0, 0},

{"append", 0, 0, 0},

{"delete", 1, 0, 0},

{"create", 0, 0, 0},

{"file", 1, 0, 0},

{0, 0, 0, 0}

};

/* getopt_long´Â À̰÷¿¡ ¿É¼Ç À妽º¸¦ ÀúÀåÇÑ´Ù. */

int option_index = 0;

c = getopt_long (argc, argv, "abc:d:", long_options, &option_index);

/* ¿É¼ÇµéÀÇ ³¡À» °ËÃâÇÑ´Ù. */

if (c == -1)

break;

switch (c)

{

case 0:

/* ¸¸ÀÏ ÀÌ ¿É¼ÇÀÌ Ç÷¡±×¸¦ ¼³Á¤Çϸé, Áö±Ý ¾Æ¹«·± Àϵµ ÇÏÁö ¸»¾Æ¶ó. */

if (long_options[option_index].flag != 0)

break;

printf("option %s", long_options[option_index].name);

if (optarg)

printf(" with arg %s", optarg);

printf("\n");

break;

case 'a':

puts("option -a\n");

break;

case 'b':

puts("option -b\n");

break;

case 'c':

printf("option -c with value `%s'\n", optarg);

break;

case 'd':

printf("option -d with value `%s'\n", optarg);

break;

case '?':

/* getopt_long´Â ÀÌ¹Ì ¿¡·¯ ¸Þ½ÃÁö¸¦ ÇÁ¸°Æ®Çß´Ù. */

break;

default:

abort ();

}

}

/* ±×µéÀÌ ¸ÂÃßÃÆ´ø °ÍÀ¸·Î `--verbose'¿Í `--brief'¸¦ º¸°íÇÏ´Â ´ë½Å¿¡, ¿ì¸®´Â ±×µé·ÎºÎÅÍ ³ª¿Â °á °ú·Î ¸¶Áö¸· »óȲÀ» º¸°íÇÑ´Ù. */

if (verbose_flag)

puts ("verbose flag is set");

/* ³²¾ÆÀÖ´Â ÄÚ¸Çµå ¶óÀÎ ÀμöµéÀ»( ¿É¼ÇÀÌ ¾ø´Â) Ãâ·ÂÇ϶ó. */

if (optind < argc)

{

printf ("non-option ARGV-elements: ");

while (optind < argc)

printf ("%s ", argv[optind++]);

putchar ('\n');

}

exit (0);

}

22.2 ȯ°æ º¯¼öµé.

ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ ¶§, µÎ°¡Áö ¹æ¹ýÀ¸·Î, ½ÇÇàµÉ ¹®¸Æ(context)¿¡ ´ëÇÑ Á¤º¸¸¦ ¹Þ´Â´Ù. ù ¹øÂ° ¹æ ¹ýÀº argv¿Í argc Àμö¸¦ ¸ÞÀÎÇÔ¼ö¿¡¼­ »ç¿ëÇÏ´Â °ÍÀ¸·Î½á À̰Ϳ¡ ´ëÇÑ °ÍÀº 22.1Àý [Program Arguments] 311 ÆäÀÌÁö¿¡¼­ ¼³¸íÇÏ¿´´Ù. µÎ ¹øÂ° ¹æ¹ýÀº ȯ°æº¯¼ö¸¦ »ç¿ëÇϴ°ÍÀε¥ Áö±ÝºÎÅÍ ¼³ ¸íÇÒ°ÍÀÌ´Ù. argv¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀº ½ÇÇàµÉ ƯÁ¤ÇÑ ÇÁ·Î±×·¥¿¡ ÁöÁ¤µÈ Ä¿¸Çµå ¶óÀÎ Àμö¸¦ ÁÖ±â À§Çؼ­ ÀüÇüÀûÀ¸·Î »ç¿ëµÈ´Ù. ´Ù¸¥ ¹æ¹ýÀ¸·Î, ȯ°æÀº, µå¹°°Ô º¯°æµÇ°í ´ú ºó¹øÇÏ°Ô ¾ï¼¼½ºµÇ´Â, ¸¹ Àº ÇÁ·Î±×·¥¿¡ ÀÇÇØ ºÐ¹èµÉ Á¤º¸¸¦ ±â¾ïÇÑ´Ù.

ÀÌ Àý¿¡¼­ ³íÀǵǰí Àִ ȯ°æº¯¼öµéÀº ´ç½ÅÀÌ ½©¿¡°Ô Ä¿¸Çµå¸¦ º¸³»°í »ç¿ëµÉ °ÍÀ» ¹èÁ¤Çϴ ȯ °æº¯¼ö¿Í °°Àº °ÍÀÌ´Ù. ½©·ÎºÎÅÍ ½ÇÇàµÈ ÇÁ·Î±×·¥µéÀº ½©·ÎºÎÅÍ È¯°æº¯¼ö ¸ðµÎ¸¦ »ó¼Ó¹Þ´Â´Ù. Ç¥ÁØ È¯°æ º¯¼öµéÀº »ç¿ëÀÚÀÇ È¨ µð·ºÅ丮, Å͹̳¯ ŸÀÔ, ÇöÀç Áö¿ª µî µî¿¡ ´ëÇÑ Á¤º¸¸¦ À§Çؼ­ »ç¿ëµÈ ´Ù; ´ç½ÅÀº ´Ù¸¥ ¸ñÀûÀ¸·Î ºÎ°¡ÀûÀΠȯ°æº¯¼ö¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ¸ðµç ȯ°æº¯¼öµéÀÇ °¡Áø °ªµéÀÇ ÁýÇÕÀº ÁýÇÕÀûÀ¸·Î ȯ°æÀ¸·Î½á ¾Ë·ÁÁø´Ù.

ȯ°æº¯¼öµéÀÇ À̸§Àº ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÏ°í ¹®ÀÚ `='¸¦ Æ÷ÇÔÇØ¼­´Â ¾ÈµÈ´Ù. ½Ã½ºÅÛ-Á¤ÀÇ È¯°æº¯¼öµé Àº Ç×»ó ´ë¹®ÀÚÀÌ´Ù. ȯ°æº¯¼öµéÀÇ °ªÀº ¹®ÀÚ¿­·Î½á Ç¥ÇöµÉ ¼ö Àִ¾°Íµµ °¡´ÉÇÏ´Ù. °ª¿¡´Â ³Î ¹® ÀÚ°¡ Æ÷ÇԵǼ­´Â ¾ÈµÈ´Ù, ¿Ö³ÄÇϸé À̰ÍÀº ¹®ÀÚ¿­ÀÇ ³¡À¸·Î °£ÁֵDZ⠶§¹®ÀÌ´Ù.

22.2.1 ȯ°æ °Ë»ö

ȯ°æº¯¼öÀÇ °ªÀº getenv ÇÔ¼ö¸¦ ÅëÇØ¼­ ¾ï¼¼½ºµÉ ¼ö ÀÖ´Ù. À̰ÍÀº Çì´õ ÆÄÀÏ `stdlib.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

ÇÔ¼ö : char *getenv (const char name)

ÀÌ ÇÔ¼ö´Â ȯ°æº¯¼ö nameÀÇ °ªÀÎ ¹®ÀÚ¿­À» ¸®ÅÏÇÑ´Ù. ´ç½ÅÀº ÀÌ ¹®ÀÚ¿­À» °»½ÅÇÒ ¼ö ¾ø´Ù. ¾î¶² GNU ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏÁö ¾Ê´Â ºñ-À¯´Ð½º ½Ã½ºÅÛµéÀº getenv ÇÔ¼öÀÇ ¿¬¼ÓÀûÀΠȣÃâ¿¡ ÀÇÇØ¼­ µ¤ ¾î¾²¿©ÁúÁö ¸ð¸¥´Ù(´Ù¸¥ ¶óÀ̺귯¸® ÇÔ¼ö¿¡ ÀÇÇÏÁö ¾Ê´Â´Ù.) ¸¸ÀÏ È¯°æº¯¼ö nameÀÌ Á¤ÀǵÇÁö ¾Ê´Â´Ù ¸é, ±× °ªÀº ³Î Æ÷ÀÎÅÍÀÌ´Ù.

ÇÔ¼ö : int putenv (const char *string)

putenv ÇÔ¼ö´Â ȯ°æÀ¸·ÎºÎÅÍ Á¤ÀǸ¦ ´õÇϰųª Á¦ÇÑ´Ù. ¸¸ÀÏ string°¡ `name=value'ÀÇ Çü½ÄÀ̶ó¸é, ±× Á¤ÀǴ ȯ°æ¿¡ ´õÇØÁø´Ù. ±×·¸Áö ¾Ê´Ù¸é, ±× string´Â ȯ°æº¯¼öÀÇ À̸§À¸·Î½á ÇØ¼®µÇ°í, ȯ°æ¾È¿¡ ¼­ ÀÌ º¯¼ö¿¡ ´ëÇÑ Á¤Àǰ¡ Á¦°ÅµÈ´Ù. GNU ¶óÀ̺귯¸®´Â SVID¿ÍÀÇ È£È¯¼ºÀ» À§Çؼ­ ÀÌ ÇÔ¼ö¸¦ Á¦ °øÇϰí ÀÖ°í; ´Ù¸¥ ½Ã½ºÅÛ¿¡¼­ ÀÌ ÇÔ¼öÀ¯¿ëÇÏÁö¾Ê´Ù.

´ç½ÅÀº ȯ°æ¿¡ ´õ ¸¹Àºº¯¼öµéÀ» ´õÇϱâ À§Çؼ­ ȯ°æ ¿ÀºêÁ§Æ®ÀÇ ³»ÀçµÈ Ç¥ÇöÀ» Á÷Á¢ÀûÀ¸·Î ´Ù·ê ¼ö ÀÖ´Ù( ¿¹·Î, ´ç½ÅÀÌ ½ÇÇàÇÏ·Á´Â°Í¿¡ ´ëÇØ¼­ ´Ù¸¥ ÇÁ·Î±×·¥·Î Åë½ÅÇϱâ À§Çؼ­; 23.5Àý [Executing a File] 327 ÆäÀÌÁö ÂüÁ¶).

º¯¼ö : chat **environ

ȯ°æÀº ¹®ÀÚ¿­ÀÇ ¹è¿­·Î½á Ç¥ÇöµÈ´Ù. °¢ ¹®ÀÚ¿­Àº `name=value'ÀÇ Çü½ÄÀ» °®´Â´Ù. ȯ°æ¾È¿¡ ³ªÅ¸ ³­ ¹®ÀÚ¿­ÀÇ ¼ø¼­´Â Áß¿äÇÏÁö ¾ÊÁö¸¸, °°Àº À̸§ÀÌ ÇÑ ¹øÀÌ»ó ³ªÅ¸³ª¼­´Â °áÄÚ ¾ÈµÈ´Ù. ¹è¿­ÀÇ ¸¶Áö ¸· ¿ä¼Ò´Â ³Î Æ÷ÀÎÅÍÀÌ´Ù. ÀÌ º¯¼ö´Â Çì´õÆÄÀÏ `unistd.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ È¯°æº¯¼öÀÇ °ªÀ» ¾ò±â ¿øÇÑ´Ù¸é getenv¸¦ »ç¿ëÇ϶ó.

22.2.2 Ç¥ÁØ È¯°æ º¯¼öµé.

±×µé ȯ°æº¯¼öµéÀº Ç¥ÁØ Àǹ̸¦ °®´Â´Ù. À̰ÍÀº ±×µéÀÌ Ç×»ó ȯ°æ¾È¿¡¼­¸¸ ³ªÅ¸³²À» ÀǹÌÇÏÁö´Â ¾Ê´Â´Ù; ±×·¯³ª ±× º¯¼öµéÀÌ ¾îµð¿¡¼­µç ³ªÅ¸³­´Ù°í ÇØµµ ±×µéÀº ±×µé¸¸ÀÇ Àǹ̸¦ °®±â ¶§¹®¿¡ ´ç½Å ÀÌ ´Ù¸¥ ¸ñÀûÀ¸·Î ȯ°æº¯¼ö À̸§À» »ç¿ëÇÏ·Á°í ½ÃµµÇؼ­´Â ¾ÈµÈ´Ù.

HOME

À̰ÍÀº »ç¿ëÀÚÀÇ È¨ µð·ºÅ丮³ª, Ãʱ⠵ðÆúÆ® ÀÛ¾÷ µð·ºÅ丮¸¦ ³ªÅ¸³»´Â ¹®ÀÚ¿­ÀÌ´Ù. »ç¿ëÀÚ´Â ¾î¶² °ªÀ¸·Î HOME¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ¾î¶² ƯÁ¤ÇÑ »ç¿ëÀÚ¸¦ À§Çؼ­ Àû´çÇÑ È¨ µð·ºÅ丮¸¦ ºÎ¿©Çϱ⸦ ¿øÇÑ´Ù¸é, HOMEÀ» »ç¿ëÇÒ ¼ö ¾ø°í; ´ë½Å¿¡, »ç¿ëÀÚ µ¥ÀÌÅÍ º£À̽º¿¡¼­ »ç¿ëÀÚÀÇ À̸§À» ã¾Æº¸¶ó ( 25.12Àý [User Database] 360 ÆäÀÌÁö ÂüÁ¶). ´ëºÎºÐÀÇ ¸ñÀû¿¡¼­´Â, HOMEÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù, ¿Ö³ÄÇϸé Á¤È®ÇÏ°Ô »ç¿ëÀÚ°¡ ±× °ªÀ» Á¤Çϵµ·Ï Çã¿ëÇϱ⠶§¹®ÀÌ´Ù.

LOGNAME

À̰ÍÀº ·Î±× ÀÎ ÇϱâÀ§Çؼ­ »ç¿ëµÇ´Â »ç¿ëÀÚ À̸§ÀÌ´Ù. ȯ°æ¿¡¼­ ÀÌ °ªÀº Á¦¸Ú´ë·Î Á¶Á¤µÉ ¼ö Àֱ⠶§¹®¿¡, À̰ÍÀº ÇÁ·Î¼¼½º¸¦ ½ÇÇà½Ã۰í ÀÖ´Â »ç¿ëÀÚ¸¦ ±¸ºÐÇϱâÀ§ÇÑ ½Å·Ú °¡´ÉÇÑ ¹æ¹ýÀÌ ¾Æ´Ï´Ù; getlogin°ú °°Àº ÇÔ¼ö(25.11 [Who Logged In] 360 ÆäÀÌÁö ÂüÁ¶)´Â ±×·¯ÇÑ ¸ñÀûÀ» À§Çؼ­´Â ¿ÀÈ÷·Á ´õ ³´´Ù. ´ëºÎºÐÀÇ ¸ñÀûÀ» À§Çؼ­´Â LOGNAMEÀÌ »ç¿ëÀÚ°¡ ±× °ªÀ» ÁöÁ¤Çϵµ·Ï Çϱ⠶§¹®¿¡ »ç¿ë Çϱ⠴õ ÁÁ´Ù.

PATH

°æ·Î´Â ÆÄÀÏÀ» ã±â À§Çؼ­ »ç¿ëµÇ´Â µð·ºÅ丮 À̸§µéÀÇ ¿­(sequence) ÀÌ´Ù. º¯¼ö PATH´Â ½ÇÇà½Ã Ű·Á´Â ÇÁ·Î±×·¥À» ã±âÀ§Çؼ­ »ç¿ëµÇ´Â °æ·Î´Â ÀúÀåÇϰí ÀÖ´Ù. execlp¿Í execvp ÇÔ¼öµéÀº (23.5Àý [Executing a File] 327 ÆäÀÌÁö ÂüÁ¶) ±×µé ÇÔ¼öµé¿¡ ÀÇÇÏ¿© ½ÇÇàµÈ ½©°ú ´Ù¸¥ À¯Æ¿¸®Æ¼¿¡¼­, ÀÌ È¯ °æº¯¼ö¸¦ »ç¿ëÇÑ´Ù. °æ·ÎÀÇ ±¸ºÐÀº ÄÝ·ÐÀ¸·Î ºÐ¸®µÈ µð·ºÅ丮 À̸§µéÀÇ ¼øÂ÷¿­(sequence) ÀÌ´Ù. µð ·ºÅ丮 À̸§ ´ë½Å¿¡ ºó ¹®ÀÚ¿­Àº ÇöÀçÀÇ µð·ºÅ丮¸¦ ³ªÅ¸³½´Ù( 9.1Àý [Working Directory] 123ÆäÀÌ Áö ÂüÁ¶).

ÀÌ È¯°æº¯¼öÀÇ ÀüÇüÀûÀÎ °ªÀº ´ÙÀ½°ú °°Àº ¹®ÀÚ¿­ÀÌ µÉ °ÍÀÌ´Ù.

:/bin:/etc:/usr/bin:/usr/new/X11:/usr/new:/usr/local/bin

TERM

À̰ÍÀº ÇÁ·Î±×·¥ Ãâ·ÂÀ» ¹Þ¾ÆµéÀÌ´Â Å͹̳¯ÀÇ Á¾·ù¸¦ ÁöÁ¤ÇÑ´Ù. ¾î¶² ÇÁ·Î±×·¥µéÀº Å͹̳¯ÀÇ Æ¯Á¤ ÇÑ Á¾·ù¿¡ ÀÇÇØ Áö¿øµÇ´Â Ưº°ÇÑ À̽ºÄÉÀÌÇÁ ½ÃÄö½º ¶Ç´Â Å͹̳θðµåµéÀ» ÀÌ¿ëÇϱâ À§ÇØ ÀÌ Á¤º¸¸¦ »ç¿ëÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù. termcap ¶óÀ̺귯¸®( Termcap ¶óÀ̺귯¸® ¸Å´º¾ó¿¡¼­ "Finding a Terminal Description" ÀýÀ» Âü°í)¸¦ »ç¿ëÇÏ´Â ¸¹Àº ÇÁ·Î±×·¥µéÀº TERM ȯ°æº¯¼ö¸¦ »ç¿ëÇÑ´Ù.

TZ

À̰ÍÀº ½Ã°£´ë(time zone)¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ ¹®ÀÚ¿­ÀÇ Çü½Ä°ú ¾î¶»°Ô ±×°ÍÀ» »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇÑ ÀÚ¼¼ ÇÑ Á¤º¸´Â 17.2.5Àý [TZ Variable] 240 ÆäÀÌÁö ÂüÁ¶.

LANG

¼Ó¼º ¹üÁÖ¸¦ »ç¿ëÇϵµ·Ï µðÆúÆ® Áö¿ªÀ» ÁöÁ¤ÇÑ´Ù.

LC_ALL

¹üÁÖ¸¦ À§ÇÑ È¯°æº¯¼ö°¡ ¾Æ´Ï¸é ¼³Á¤ÇÑ´Ù. Áö¿ª¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸¸¦ 19Àå [Locales] 259 ÆäÀÌÁö ÂüÁ¶.

LC_COLLATE

À̰ÍÀº ¹®ÀÚ¿­ Á¤·ÄÀ» À§Çؼ­ ¾î¶² Áö¿ªÀ» ÁöÁ¤ÇÑ´Ù.

LC_CTYPE

À̰ÍÀº ¹®ÀÚ ÁýÇÕ(sets)°ú ¹®ÀÚ ºÐ·ù¸¦À§ÇØ »ç¿ëÇϵµ·Ï ¾î¶² Áö¿ªÀ» ÁöÁ¤ÇÑ´Ù.

LC_MONETARY

À̰ÍÀº Çü½ÄÈ­µÈ ÅëÈ­·® °ªÀ» »ç¿ëÇϱâÀ§ÇÑ ¾î¶² Áö¿ªÀ» ÁöÁ¤ÇÑ´Ù.

LC_NUMERIC

À̰ÍÀº Çü½ÄÈ­µÈ ¼ýÀÚµéÀ» »ç¿ëÇϱâ À§ÇÑ ¾î¶² Áö¿ªÀ» ÁöÁ¤ÇÑ´Ù.

LC_TIME

À̰ÍÀº Çü½ÄÈ­µÈ ³¯Â¥/½Ã°£ °ªµéÀ» À§Çؼ­ ¾î¶² Áö¿ªÀ» ÁöÁ¤ÇÑ´Ù.

_POSIX_OPTION_ORDER

¸¸ÀÏ ÀÌ È¯°æº¯¼ö°¡ Á¤ÀǵǾú´Ù¸é, ±×°ÍÀº getopt¿¡ ÀÇÇÑ Ä¿¸Çµå ¶óÀÎ ÀμöÀÇ ÀçÁ¤¸®¸¦ ±ÝÁöÇÑ´Ù. 22.1.1Àý [Argument Syntax] 311 ÆäÀÌÁö ÂüÁ¶)

22.3 ÇÁ·Î±×·¥ Á¾·á.

ÇÁ·Î±×·¥À» Á¾·á½ÃŰ´Â Æò»óÀûÀÎ ¹æ¹ýÀº ¸ÞÀÎ ÇÔ¼ö°¡ ¸®ÅÏÇϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù. ¸ÞÀÎ ÇÔ¼ö·ÎºÎÅÍ ¸®ÅϵǴ ºÐ±â(exit) »óȲ°ªÀº ÇÁ·Î¼¼½ºÀÇ ºÎ¸ð ÇÁ·Î¼¼½º³ª ½©¿¡°Ô Á¤º¸¸¦ º¸°íÇϱâ À§Çؼ­ »ç¿ëµÈ ´Ù. ÇÁ·Î±×·¥Àº exit ÇÔ¼ö¸¦ È£ÃâÇÔÀ¸·Î½á ¶ÇÇÑ Á¾·áÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ, ÇÁ·Î±×·¥Àº ½Ã±×³¯µé¿¡ ÀÇÇØ ¼­ Á¾·áµÉ ¼ö ÀÖ´Ù; À̰ÍÀº 21Àå [Signal Handling] 271 ÆäÀÌÁö¿¡ ÀÚ¼¼ÇÏ°Ô ¼³¸íµÇ¾î ÀÖ´Ù. abortÇÔ ¼ö´Â ÇÁ·Î±×·¥À» Á×ÀÌ´Â(kill) ½Ã±×³¯À» ¹ß»ý½ÃŲ´Ù.

22.3.1 º¸ÅëÀÇ Á¾·á.

ÇÁ·Î¼¼½º´Â ÇÁ·Î±×·¥ÀÌ exit¸¦ È£ÃâÇÒ ¶§ º¸Åë Á¾·áµÈ´Ù. main ÇÔ¼ö·ÎºÎÅÍÀÇ ¸®ÅÏÀº exit ¸¦ È£Ãâ Çϴ°Ͱú °°°í, mainÀÌ ¸®ÅÏÇѰªÀº exit¿¡ Àμö·Î½á »ç¿ëµÈ´Ù.

ÇÔ¼ö : void exit (int status)

exit ÇÔ¼ö´Â »óȲ status·Î ÇÁ·Î¼¼½º¸¦ Á¾·áÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ¸®ÅÏÇÏÁö ¾Ê´Â´Ù.

º¸ÅëÀÇ Á¾·á´Â ´ÙÀ½°ú °°Àº µ¿ÀÛµéÀÇ ¿øÀÎÀÌ µÈ´Ù:

1. atexit ³ª on_exit ÇÔ¼öµé¿¡ µî·ÏµÈ ÇÔ¼öµéÀº µî·ÏÀÇ ¿ª¼øÀ¸·Î È£ÃâµÇ¾îÁø´Ù. ÀÌ ¸ÞÄ«´ÏÁòÀº ÇÁ·Î ±×·¥ÀÌ Á¾·áÇÒ ¶§ ¼öÇàµÇ¾îÁö´Â ÀڽŸ¸ÀÇ "cleanup" µ¿ÀÛµéÀ» ÁöÁ¤Çϵµ·Ï ´ç½ÅÀÇ ÀÀ¿ëÇÁ·Î±×·¥¿¡°Ô Çã¿ëÇÑ´Ù. ÀüÇüÀûÀ¸·Î, À̰ÍÀº ÆÄÀÏ¿¡ ÇÁ·Î±×·¥ »óȲ Á¤º¸¸¦ ÀúÀåÇϰųª, °øÀ¯ µ¥ÀÌÅͺ£À̽º¿¡¼­ ¶ô µéÀ» ÇØÁ¦Çϴ°Ͱú °°Àº ÀϵéÀ» Çϴµ¥ »ç¿ëµÈ´Ù.

2. ¹öÆÛµÈ Ãâ·Â µ¥ÀÌÅͰ¡ ¸ðµÎ ±â·ÏµÇ¾î, °³¹æµÈ ¸ðµç ½ºÆ®¸²ÀÌ Æó¼âµÇ¾ú´Ù. 7.4Àý [Closing Streams] 65 ÆäÀÌÁö ÂüÁ¶. ¶ÇÇÑ, tmpfile ÇÔ¼ö¿¡ ÀÇÇØ °³¹æµÇ¾ú´ø Àӽà ÆÄÀϵéÀº Á¦°ÅµÈ´Ù; 9.10Àý [Temporary Files] 141 ÆäÀÌÁö ÂüÁ¶.

3. ÇÁ·Î±×·¥À» Á¾·á½Ã۵µ·Ï _exit °¡ È£ÃâµÇ¾ú´Ù. 22.3.5Àý [Termination Internals] 322 ÆäÀÌÁö ÂüÁ¶.

22.3.2 Exit »óȲµé.

ÇÁ·Î±×·¥ÀÌ Á¾·áÇÒ ¶§, ±×°ÍÀº ºÐ±â »óȲ(exit status)À» »ç¿ëÇØ¼­, Á¾·áÀÇ ¿øÀο¡ ´ëÇÑ ÀÛÀº ¾çÀÇ Á¤º¸¸¦ ºÎ¸ð ÇÁ·Î¼¼½º¿¡°Ô ¸®ÅÏÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº ÇöÁ¸ÇÏ´Â ÇÁ·Î¼¼½º°¡ exit¿¡°Ô Àμö·Î½á ÁÖ´Â 0 ¿¡¼­ 255»çÀÌÀÇ °ªÀÌ´Ù. º¸Åë ´ç½ÅÀº ¼º°øÀ̳ª ½ÇÆÐ¿¡ ´ëÇÑ ¸Å¿ì ±¤¹üÀ§ÇÑ Á¤º¸¸¦ º¸°íÇϱâ À§Çؼ­ exit »óȲÀ» »ç¿ëÇÒ °ÍÀÌ´Ù. ´ç½ÅÀº ½ÇÆÐÀÇ ÀÌÀ¯¿¡ ´ëÇØ¼­ ¸Å¿ì ÀÚ¼¼ÇϰԴ Á¤º¸¸¦ ÁÙ ¼ö´Â¾ø°í, ´ë ºÎºÐÀÇ ºÎ¸ð ÇÁ·Î¼¼½ºµµ ´õ À̻󼼹ÐÇÑ Á¤º¸¸¦ ¿øÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.

¾î¶² ÇÁ·Î±×·¥ÀÌ ¸®ÅÏÇÏ´Â °ªÀº ¾î¶² ºÎ·ùÀÇ »óȲ°ª¿¡ ¼ÓÇÑ´Ù. ´ëºÎºÐÀÇ °ü½ÀÀº ¼º°øÇϸé 0ÀÌ°í ½ÇÆÐÇϸé 1ÀÌ´Ù. ±×·¯³ª ºñ±³¸¦ ¼öÇàÇÏ´Â ÇÁ·Î±×·¥Àº ´Ù¸¥ °ü½ÀÀ» »ç¿ëÇÑ´Ù: ¸ÅÄ¡µÇÁö ¾Ê¾ÒÀ½À» Áö ÀûÇϱâ À§Çؼ­ 1À» »ç¿ëÇÏ°í ºñ±³ ºÒ°¡´ÉÀÓÀ» ÁöÀûÇϱâ À§Çؼ­ 2¸¦ »ç¿ëÇÑ´Ù. ´ç½ÅÀÇ ÇÁ·Î±×·¥ÀÌ ±× °ÍÀ» À§ÇÑ Á¾·á°ü½ÀÀ» ÀÌÇØÇÏ·Á¸é Á¾·á°ü½ÀÀ» µû¶ó¾ßÇÑ´Ù.

ÀϹÝÀûÀÎ ±¡½ÀÀº »óȲ°ªÀ¸·Î 128°³¸¦ ¿¹¾àÇÏ°í Æ¯º°ÇÑ ¸ñÀûÀ» À§Çؼ­ È®ÀåÇÑ´Ù. Ưº°ÇϰÔ, 128°³ÀÇ °ªÀº ¼­ºêÇÁ·Î¼¼½º¿¡¼­ ´Ù¸¥ ÇÁ·Î±×·¥¿¡°Ô ½ÇÆÐ¸¦ ÁöÀûÇϱâ À§Çؼ­ »ç¿ëµÈ´Ù. ÀÌ °ü½ÀÀº º¸ÆíÀûÀ¸ ·Î Á¦°øµÇÁö´Â ¾ÊÁö¸¸, ´ç½ÅÀÇ ÇÁ·Î±×·¥ÀÌ ±×°ÍÀ» µû¸£µµ·Ï ÇÏ´Â °ÍÀÌ ÁÁ´Ù.

ÁÖÀÇ: ºÐ±â»óȲÀ¸·Î½á ¿¡·¯µéÀÇ °³¼ö¸¦ »ç¿ëÇÏ·Á°í ½ÃµµÇÏÁö ¸»¾Æ¶ó.

À̰ÍÀº ½ÇÁ¦·Î ¸Å¿ì À¯¿ëÇÏÁö ¾Ê´Ù; ºÎ¸ð ÇÁ·Î¼¼½º´Â ¾ó¸¶³ª ¸¹Àº ¿¡·¯µéÀÌ ¹ß»ýÇß´ÂÁö¿¡ ÁÖÀǸ¦ ±â ¿ïÀÌÁö ¾Ê´Â´Ù. ±×°Íº¸´Ù ´õ ½É°¢ÇÑ °æ¿ì·Î´Â, »óȲ°ªÀÌ 8ºñÆ®¿¡¼­ ©¸®±â ¶§¹®¿¡ ¸¸ÀÏ ÇÁ·Î±×·¥¿¡ ¼­ 256°³ÀÇ ¿¡·¯¸¦ º¸°í ÇÑ´Ù¸é, ºÎ¸ð ÇÁ·Î¼¼½º´Â 0°³ÀÇ ¿¡·¯°¡ ³­ °ÍÀ¸·Î º¸°í¸¦ ¹ÞÀ»°ÍÀ̰í_°á±¹ ¼º°øÇÑ °ÍÀ¸·Î µÇ¾î¹ö¸°´Ù. °°Àº ÀÌÀ¯·Î, 255°³¸¦ ÃʰúÇÒ ¼ö Àֱ⠶§¹®¿¡ Áß·áÀÇ »óȲÀ¸·Î½á ¿¡·¯ÀÇ °³¼ö¸¦ »ç¿ëÇÏ¿© ÀÛ¾÷ÇÏÁö ¸»¾Æ¶ó.

À̽ļº ³ëÆ®: ¾î¶² ºñ-POSIX ½Ã½ºÅÛµéÀº Á¾·á »óȲ °ªµéÀ» À§Çؼ­ ´Ù¸¥ °ü½ÀÀ» »ç¿ëÇÑ´Ù. Á»´õ ÁÁ Àº À̽ļºÀ» À§Çؼ­´Â, ¼º°ø°ú ½ÇÆÐ¸¦ À§ÇÑ »óȲ°ªÀ¸·Î ¸ÅÅ©·Î EXIT_SUCCESS ¿Í EXIT_FAILURE ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×µéÀº Æä´õÆÄÀÏ `stdlib.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

¸ÅÅ©·Î : int EXIT__SUCCESS

ÀÌ ¸ÅÅ©·Î´Â ¼º°øÀûÀÎ ÇÁ·Î±×·¥ ¼öÇàÀ» ¾Ë¸®±âÀ§Çؼ­ exit ÇÔ¼ö¿Í ÇÔ²² »ç¿ëµÉ ¼ö ÀÖ´Ù. POSIX ½Ã ½ºÅÛ¿¡¼­, ÀÌ ¸ÅÅ©·ÎÀÇ °ªÀº 0À̰í, ´Ù¸¥ ½Ã½ºÅÛ¿¡¼­ ÀÌ °ªÀº ¾î¶² ´Ù¸¥ Á¤¼ö Ç¥Çö( ¾Æ¸¶µµ ºñ-»ó¼ö )ÀÌ µÉ °ÍÀÌ´Ù.

¸ÅÅ©·Î : int EXIT__FAILURE

ÀÌ ¸ÅÅ©·Î´Â ºñ¼º°øÀûÀÎ ÇÁ·Î±×·¥ ¼öÇàÀ» ¾Ë¸®±âÀ§Çؼ­ exit ÇÔ¼ö¿Í ÇÔ²² »ç¿ëµÉ ¼ö ÀÖ´Ù. POSIX ½Ã½ºÅÛ¿¡¼­, ÀÌ ¸ÅÅ©·ÎÀÇ °ªÀº 1ÀÌ´Ù. ´Ù¸¥ ½Ã½ºÅ۵鿡¼­ ±× °ªÀº ¾î¶² ´Ù¸¥ Á¤¼ö Ç¥Çö( ¾Æ¸¶µµ ºñ- »ó¼ö )ÀÌ µÉ °ÍÀÌ´Ù. ´Ù¸¥ 0ÀÌ ¾Æ´Ñ »óȲ°ªµéÀº ¾ÕÀ¸·ÎÀÇ ÀÏÀ» ¾Ë¸°´Ù. ¾î¶² ÇÁ·Î±×·¥µéÀº ƯÁ¤ÇÑ Á¾·ùÀÇ "ºñ-¼º°ø"À» ¾Ë¸®±â À§Çؼ­ ´Ù¸¥ 0ÀÌ ¾Æ´Ñ »óȲ °ªµéÀ» »ç¿ëÇÑ´Ù. ¿¹¸¦µé¾î, diff´Â ÆÄÀϵéÀÌ ¼­·Î ´Ù¸§À» ÀǹÌÇÒ ¶§ »óȲ°ª 1À» »ç¿ëÇϰí, ÆÄÀÏÀ» °³¹æÇϱⰡ ¾î·Æ´Ù¸é 2 ¶Ç´Â ±× ÀÌ»óÀÇ °ªÀ» »ç¿ëÇÑ´Ù.

22.3.3 Á¾·á½ÃÀÇ »óȲÁ¤¸®.

´ç½ÅÀÇ ÇÁ·Î±×·¥¿¡¼­ º¸ÅëÀÇ Á¾·á°¡ ¹ß»ýÇÏ¸é ±× ÀڽŸ¸ÀÇ Á¤¸®(cleanup) ÇÔ¼ö¸¦ ½ÇÇàÇÏ¿© Á¤µ·ÇÒ ¼ö ÀÖ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ¿©·¯°³ÀÇ ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ ÇÑ °³ÀÇ ¶óÀ̺귯¸®¸¦ »ç¿ëÇϰí ÀÖÀ»¶§, ¸ðµç ÀÀ ¿ëÇÁ·Î±×·¥ÀÌ Á¾·áµÇ±âÀü¿¡ ¶óÀ̺귯¸®ÀÇ Á¤¸®(cleanup) ÇÔ¼öµéÀ» ¸í½ÃÀûÀ¸·Î È£ÃâÇÑ´Ù¸é ½Å·Ú¼ºÀÌ ¾ø´Ù. atexit ¶Ç´Â on_exit¸¦ »ç¿ëÇØ¼­ ¶óÀ̺귯¸® ±× ÀÚü¿¡¼­ Á¤¸® ÇÔ¼ö¸¦ ¼³Á¤ÇÔÀ¸·Î½á, ÀÀ¿ë ÇÁ ·Î±×·¥¿¡°Ô´Â º¸ÀÌÁö ¾Ê´Â Á¤¸®(cleanup)ÇÔ¼ö¸¦ ¸¸µå´Â °ÍÀÌ ´õ ½Å·Ú¼ºÀÖ´Â ÇÁ·Î±×·¥ÀÌ µÈ´Ù.

ÇÔ¼ö : int atexit (void (*function) (void))

atexit ÇÔ¼ö´Â ÇÁ·Î±×·¥ÀÌ Á¤»óÀûÀ¸·Î Á¾·áÇϸé È£ÃâµÇµµ·Ï ÇÔ¼ö functionÀ» µî·ÏÇÑ´Ù. ±× function Àº ¾Æ¹«·± Àμö°¡ ¾øÀÌ È£ÃâµÈ´Ù. atexit·ÎºÎÅÍÀÇ ¸®ÅϰªÀº ¼º°øÇϸé 0ÀÌ°í ¸¸ÀÏ ±× ÇÔ¼ö°¡ µî·ÏµÉ ¼ö ¾øÀ¸¸é 0ÀÌ ¾Æ´Ñ°ªÀ» ¸®ÅÏÇÑ´Ù.

ÇÔ¼ö : int on__exit (void (*function)(int status, void *arg), void *arg)

ÀÌ ÇÔ¼ö´Â atexit º¸´Ù´Â Á»´õ ´Ù¾çÇÔÀ» ±¸»çÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ÀÌ ÇÔ¼ö´Â µÎ °³ÀÇ Àμö·Î½á ÇÔ¼ö function°ú Æ÷ÀÎÅÍ arg¸¦ ¹Þ¾Æ µéÀδÙ. Á¤»óÀûÀÌ ÇÁ·Î±×·¥ Á¾·á½Ã, ±× functionÀº µÎ °³ÀÇ Àμöµé, Áï exit¿¡ ÁÖ¾ú´ø »óȲ°ª°ú arg¿Í ÇÔ²² È£ÃâµÈ´Ù. ÀÌ ÇÔ¼ö´Â SunOS¿ÍÀÇ È£È¯¼ºÀ» À§ÇØ GNU C ¶ó À̺귯¸®¿¡ Æ÷ÇԵǾúÀ¸¸ç, ´Ù¸¥ ½Ã½ºÅÛ¿¡¼­´Â Áö¿øµÇÁö ¾ÊÀ» °ÍÀÌ´Ù.

´ÙÀ½Àº exit ¿Í atexit ÀÇ »ç¿ëÀ» ¼³¸íÇÏ´Â ÇÁ·Î±×·¥ ¿¹Á¦ÀÌ´Ù.

#include <stdio.h>

#include <stdlib.h>

void

bye (void)

{

puts ("Goodbye, cruel world....");

}

int

main (void)

{

atexit (bye);

exit (EXIT_SUCCESS);

}

ÀÌ ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÆÀ» ¶§, ´ÜÁö ¸Þ½ÃÁö¸¦ ÇÁ¸°Æ®Çϰí Á¾·áÇÑ´Ù.

22.3.4 ÇÁ·Î±×·¥ ÁßÁö½Ã۱â.

´ç½ÅÀº abort ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ´ç½ÅÀÇ ÇÁ·Î±×·¥À» ÁßÁö½Ãų ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö¸¦ À§ÇÑ ÇÁ·ÎÅäŸÀÔÀº `stdlib.h'¿¡ ÀÖ´Ù.

ÇÔ¼ö : void abort (void)

abort ÇÔ¼ö´Â ºñÁ¤»óÀûÀ¸·Î ÇÁ·Î±×·¥À» Á¾·á½ÃŲ´Ù. À̰ÍÀº atexit ¶Ç´Â on_exit·Î µî·ÏµÈ Á¤¸® (cleanup)ÇÔ¼öµéÀ» ½ÇÇàÇÏÁö ¾Ê´Â´Ù. ÀÌ ÇÔ¼ö´Â SIGABRT ½Ã±×³¯À» ¹ß»ý½ÃÅ´À¸·Î½á ÇÁ·Î¼¼½º¸¦ Á¾ ·á ½Ã۰í, ´ç½ÅÀÇ ÇÁ·Î±×·¥Àº ÀÌ ½Ã±×³¯À» °¡·Îä¼­ ó¸®ÇÏ´Â Çڵ鷯¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù.

¾ÕÀ¸·ÎÀÇ º¯È­¿¡ ´ëÇÑ °æ°í: Proposed Federal consorship regulations Àº È£ÃâµÈ ÀÌ ÇÔ¼öÀÇ °¡´É¼º¿¡ ´ëÇÑ Á¤º¸¸¦ ´ç½Å¿¡°Ô ÁÖ´Â °ÍÀ» ¿ì¸®¿¡°Ô ±ÝÇϰí ÀÖ´Ù. ¿ì¸®´Â À̰ÍÀ» ÇÁ·Î±×·¥À» Á¾·á½Ã۴µ¥ »ç¿ëÇÏ´Â ¹æ¹ýÀ¸·Î´Â ¿ëÀÎÇÏÁö ¾Ê´Â´Ù°í ¸»ÇÒ °ÍÀ» ¿äû¹Þ°í ÀÖ´Ù.

22.3.5 ³»ºÎÀû Á¾·á

_exit ÇÔ¼ö´Â exit¿¡ ÀÇÇØ¼­ ÇÁ·Î¼¼½º¸¦ Á¾·áÇϱâ À§Çؼ­ »ç¿ëµÇ´Â ±âº» µ¿ÀÛÀÌ´Ù. À̰ÍÀº `unistd.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

ÇÔ¼ö : void __exit (int status)

_exit ÇÔ¼ö´Â »óȲ status·Î ÇÁ·Î¼¼½º°¡ Á¾·áµÇµµ·Ï ÇÏ´Â ±âº» µ¿ÀÛ(primitives)ÀÌ´Ù. ÀÌ ÇÔ¼ö¸¦ È£ ÃâÇÏ´Â °ÍÀº atexit ¶Ç´Â on_exit¿¡ µî·ÏµÈ Á¤¸®(cleanup) ÇÔ¼öµéÀÌ ½ÇÇàµÇÁö ¾Ê´Â´Ù.

¸í¹éÈ÷ Á¾·á¸¦ È£ÃâÇϰųª, ¶Ç´Â ½Ã±×³¯ÀÇ °á°ú¿¡ ÀÇÇÑ Á¾·áÀ̰ųª_¾î¶² ÀÌÀ¯¿¡ ÀÇÇØ¼­ ÇÁ·Î¼¼½º°¡ Á¾·áµÉ ¶§, ´ÙÀ½°ú °°Àº ÀÏÀÌ ¹ß»ýÇÑ´Ù.

둁 ÇÁ·Î¼¼½º¿¡¼­ ¸ðµç °³¹æµÈ ÆÄÀÏ ±â¼úÀÚµéÀº Æó¼èµÈ´Ù. 8Àå [Low-Level I/O] 103 ÆäÀÌÁö ÂüÁ¶.

둁 Á¾·á »óȲ ÄÚµåÀÇ ÇÏÀ§ 8ºñÆ®´Â wait ³ª waitpid¸¦°ÅÃļ­ ºÎ¸ð ÇÁ·Î¼¼½º¿¡°Ô º¸°íµÇµµ·Ï ÀúÀåµÈ ´Ù; 23.6Àý [Process Completion] 329 ÆäÀÌÁö ÂüÁ¶.

둁 Á¾·áµÈ ÇÁ·Î¼¼½ºÀÇ ¾î´À ÀÚ½Ä ÇÁ·Î¼¼½ºµéÀº »õ·Î¿î ºÎ¸ð ÇÁ·Î¼¼½º°¡ ÇÒ´çµÈ´Ù. (À̰ÍÀº ÇÁ·Î¼¼½º ID 1·Î¼­, óÀ½ÀÇ ÇÁ·Î¼¼½ºÀÌ´Ù.)

둁 SIGCHLD ½Ã±×³¯Àº ºÎ·Î ÇÁ·Î¼¼½º¿¡°Ô º¸³»¾îÁø´Ù.

둁 ¸¸ÀÏ ±× ÇÁ·Î¼¼½º°¡ Á¦¾îÁßÀÎ Å͹̳¯À» °¡Áø ¼¼¼Ç ¸®´õ(session leader)¶ó¸é, SIGHUP ½Ã±×³¯Àº Àü ¸é ÀÛ¾÷¿¡ ÀÖ´Â °¢°¢ÀÇ ÇÁ·Î¼¼½º¿¡°Ô º¸³»¾î Áö°í, Á¦¾îÁßÀÎ Å͹̳¯Àº ¼¼¼ÇÀ¸·ÎºÎÅÍ ºÐ¿­µÈ´Ù. 24Àå [Job Control] 335 ÆäÀÌÁö ÂüÁ¶.

둁 ¾î¶² ÇÁ·Î¼¼½ºÀÇ Á¾·á°¡ ÇÁ·Î¼¼½º ±×·ìÀ» °í¾Æ°¡ µÇµµ·Ï Çϰí, ÇÁ·Î¼¼½º ±×·ìÀÇ ¾î¶² ¸â¹ö¸¦ ¸Ø Ãßµµ·Ï ÇÏ´Â ¿øÀÎÀÌ µÈ´Ù¸é, SIGHUP ½Ã±×³¯°ú SIGCONT ½Ã±×³¯ÀÌ ±×·ì¿¡ ÀÖ´Â °¢°¢ÀÇ ÇÁ·Î¼¼½º¿¡°Ô º¸³»¾îÁø´Ù. 24Àå [Job Control] 335 ÆäÀÌÁö ÂüÁ¶.