18. È®ÀåµÈ ¹®ÀÚµé.
´Ù¼öÀÇ ¾ð¾îµéÀÌ charÀÇ ÇüÅ·Π¹®ÀÚµéÀ» Ç¥ÇöÇÒ ¼ö ¾ø´Ù. ÀϺ»¾î¿Í Áß±¹¾î°¡ ÀÌ¿Í °¡Àå À¯»çÇÑ ¿¹ÀÌ´Ù. GNU C ¶óÀ̺귯¸®´Â È®ÀåµÈ ¹®ÀÚ ÁýÇÕµéÀ» Ãë±ÞÇϱâ À§Çؼ µÎ °³ÀÇ ¸ÞÄ«´ÏÁòÀ» Áö¿øÇÑ ´Ù: ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚµé°ú ¿ÍÀ̵å ij¸¯ÅÍ(wide characters) ÀÌ ÀåÀº ÀÌµé ¸ÞÄ«´ÏÁò°ú ±×µéÀ» º¯È¯ÇÏ ´Â ÇÔ¼öµéÀ» ¾î¶»°Ô »ç¿ëÇÒ °ÍÀÎÁö¸¦ ¼³¸íÇÑ´Ù. ÀÌ Àå¿¡ ÀÖ´Â ÇÔ¼öµéÀÇ µ¿ÀÛÀº ¹®ÀÚ ºÐ·ù LC_CTYPE ¹üÁÖ·Î ³ªÅ¸³½ ÇöÀçÀÇ Áö¿ª¿¡ ÀÇÇØ ¿µÇâÀ» ¹Þ´Â´Ù; 19.3Àý [Locale Categories] 260 ÆäÀÌ Áö ÂüÁ¶. Áö¿ªÀ» ¼±ÅÃÇÏ´Â °ÍÀº ´ÙÁß¹ÙÀÌÆ® Äڵ尡 »ç¿ëµÇ´ÂÁö, ¿ÍÀ̵å ij¸¯ÅÍ Äڵ尡 »ç¿ëµÇ´ÂÁö¸¦ ¼±ÅÃÇÏ´Â °ÍÀÌ´Ù.
18.1 È®ÀåµÈ ¹®Àڵ鿡 ´ëÇÑ ¼Ò°³.
´ç½ÅÀº µÎ°¡Áö ¹æ¹ýÁß¿¡ Çϳª·Î È®Àå ¹®ÀÚµéÀ» ³ªÅ¸³¾ ¼ö ÀÖ´Ù.
둁 ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚµéÀº char ¿ÀºêÁ§Æ®ÀÇ ¹è¿ÀÎ ¿ø·¡ÀÇ ¹®ÀÚ¿¿¡ Æ÷ÇÔ µÉ ¼ö ÀÖ´Ù. À̰ÍÀÇ À̵æÀº ¸¹Àº ÇÁ·Î±×·¥µé°ú ¿î¿µÁ¦Ã¼°¡ ¾Æ¹«·± º¯È¯¾øÀÌ, ¿ø·¡ÀÇ ASCII ¹®ÀÚµé »çÀÌ¿¡ Èð¾îÁ® ÀÖ´Â ´ÙÁß¹ÙÀÌ Æ® ¹®ÀÚµéÀ» ´Ù·ê¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.
둁 ¿ÍÀÌÆ® ij¸¯ÅÍ´Â ´õ ¸¹Àº ºñÆ®µéÀ» Á¡À¯ÇÑ´Ù´Â °ÍÀ» Á¦¿ÜÇϰí´Â ¿ø·¡ÀÇ ¹®ÀÚµé°ú °°´Ù. ¿ÍÀÌÆ® ij¸¯ÅÍ µ¥ÀÌÅÍ Å¸ÀÔ, wchar_t´Â ASCII ÄÚµåµé Àº ¹°·Ð È®ÀåµÈ ¹®ÀÚ ÄÚµåµéÀ» ´Ù·ç±âÀ§Çؼ ÃæºÐÈ÷ Å« ¹üÀ§¸¦ °®´Â´Ù. ¿ÍÀ̵å ij·°ÅÍÀÇ À̵æÀº °¢ ¹®ÀÚµéÀÌ ¿ø·¡ÀÇ ASCII ¹®ÀÚµéó·³ ´ÜÀÏÇÑ µ¥ÀÌÅÍ ¿À ºêÁ§Æ®¶ó´Â °ÍÀÌ´Ù. ÇÏÁö¸¸ ¸î°³ÀÇ ºÒÆíÀÌ ÀÖ´Ù.
둁 ¾î¶² ÇöÁ¸ÇÏ´Â ÇÁ·Î±×·¥ÀÌ ¿ÍÀÌÆ® ij¸¯Å͸¦ »ç¿ëÇϵµ·Ï ÇÏ·Á¸é °»½ÅµÇ°í ÀçÄÄÆÄÀÏ µÇ¾î¾ß¸¸ ÇÑ ´Ù.
둁 ¿ÍÀ̵å ij¸¯ÅÍÀÇ ÆÄÀϵéÀº º¸ÅëÀÇ ¹®ÀÚµéÀ» Á¦¿ÜÇϰí´Â ÇÁ·Î±×·¥¿¡ ÀÇÇØ ÀÐÇôÁú ¼ö ¾ø´Ù.
ÀϹÝÀûÀ¸·Î, ´ç½ÅÀº ÆÄÀÏ¿¡ ÅØ½ºÆ®¸¦ Àаųª ¾²±âó·³, ¿ÜºÎ ÇÁ·Î±×·¥ ÀÎÅÍÆäÀ̽ºÀÇ ºÎºÐÀ¸·Î ´ÙÁß ¹ÙÀÌÆ® ¹®ÀÚ Ç¥ÇöÀ» »ç¿ëÇÑ´Ù. ±×·¸Áö¸¸, ÀÏÁ¤ÇÑ Ç¥ÇöÀº ÆíÁý ¸í·ÉµéÀ» °¡Àå ½±°Ô ±¸ÇöÇϵµ·Ï Çϱ⠶§¹®¿¡, wchar_t ¿ÀºêÁ§Æ®ÀÇ ¹è¿·Î È®ÀåµÈ ¹®ÀÚµéÀ» Æ÷ÇÔÇÏ´Â ¹®ÀÚ¿À» ³»ºÎÀûÀΠ󸮸¦ ¼öÇàÇÏ´Â °ÍÀÌ º¸ÅëÀº ´õ ½±´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ÆÄÀÏ¿¡¼´Â ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚµéÀ» »ç¿ëÇÏ°í ³»ºÎ µ¿ÀÛ¿¡´Â ¿ÍÀÌ Æ® ij¸¯Å͸¦ »ç¿ëÇÑ´Ù¸é, ´ç½ÅÀº µ¥ÀÌÅ͸¦ Àаųª ¾µ ¶§, ±×µé »çÀÌ¿¡ º¯È¯À» ÇÒ Çʿ䰡 ÀÖ´Ù. ¸¸ÀÏ ´ç½ÅÀÇ ½Ã½ºÅÛÀÌ È®ÀåµÈ ¹®ÀÚµéÀ» Áö¿øÇÑ´Ù¸é, ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚµé°ú ¿ÍÀ̵å ij¸¯ÅÍ ¹®ÀÚµéÀ» µÑ´Ù Áö¿øÇÑ´Ù. ¶óÀ̺귯¸®¿¡ Æ÷ÇÔµÈ ÇÔ¼ö¸¦ ÅëÇØ ´ç½ÅÀº ±× µÎ Ç¥Çö »çÀÌÀÇ º¯È¯À» ¼öÇàÇÒ ¼ö ÀÖ´Ù. ÀÌ µé ÇÔ¼öµéÀº ÀÌ Àå¿¡ ¼³¸íµÇ¾î ÀÖ´Ù.
18.2 Áö¿ª°ú È®ÀåµÈ ¹®ÀÚ.
ÄÄÇ»ÅÍ ½Ã½ºÅÛÀº ÇÑ °³ÀÇ ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ Äڵ庸´Ù ¸¹ÀÌ, ±×¸®°í ÇÑ °³ÀÇ ¿ÍÀÌÆ® ij¸¯ÅÍ Äڵ庸´Ù ´Â ¸¹ÀÌ Áö¿øÇÒ ¼ö ÀÖ´Ù. »ç¿ëÀÚ´Â ¹®ÀÚ ºÐ·ù¿¡ ÀÖ´Â ÇöÀçÀÇ Áö¿ªÄڵ带 ¼±ÅÃÇÔÀ¸·Î½á Á¦¾îÇÑ´Ù( 19Àå [Locals] 259 ÆäÀÌÁö ÂüÁ¶.) °¢ Áö¿ªÀº ƯÁ¤ÇÑ ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ ÄÚµå¿Í ƯÁ¤ÇÑ ¿ÍÀ̵å ij·°ÅÍ Äڵ带 Á¤ÇÑ´Ù. Áö¿ªÀÇ ¼±ÅÃÀº ¶óÀ̺귯¸®¿¡ ÀÖ´Â º¯È¯ ÇÔ¼öµéÀÇ µ¿ÀÛ¿¡ ¿µÇâÀ» ³¢Ä£´Ù.
¾î¶² Áö¿ªµé¿¡¼´Â ¿ÍÀ̵åij¸¯Åͳª ȤÀº ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚµéÁß Çϳª¸¸ Áö¿øÇÑ´Ù. À̵éÀÇ Áö¿ª¿¡¼, ¶óÀ̺귯¸®ÀÇ º¯È¯ ÇÔ¼öµéÀº ºñ·Ï ÇÏÂúÀº ÀϵéÀÌÁö¸¸ ¿©ÀüÈ÷ ÀÛ¾÷ÇÑ´Ù.
¸¸ÀÏ ´ç½ÅÀÌ ¹®Àںзù¸¦ À§Çؼ »õ·Î¿î Áö¿ªÀ» ¼±ÅÃÇÑ´Ù¸é, ±×µé ÇÔ¼öµé¿¡ ÀÇÇÏ¿© À¯ÁöµÇ°í ÀÖ´ø ³»ºÎ shift »óȲÀº È¥¶õÇÏ°Ô µÉ ¼öµµ ÀÖ´Ù, ±×·¯¹Ç·Î ´ç½ÅÀÌ ¹®ÀÚ¿À» ó¸®ÇÏ´Â µµÁß¿¡ Áö¿ªÀ» º¯°æ ÇÏ´Â °ÍÀº ÁÁÀº »ý°¢ÀÌ ¾Æ´Ï´Ù.
18.3 ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚµé.
º¸ÅëÀÇ ASCII Äڵ忡¼ ¿¬¼ÓµÈ ¹®ÀÚµéÀº ¹ÙÀÌÆ®°¡ ¿¬¼ÓÇϰí ÀÖÀ½À» ÀǹÌÇÏ°í °¢ ¹®ÀÚ´Â ÇÑ ¹ÙÀÌÆ® ÀÌ´Ù. À̰ÍÀº ¸Å¿ì °£´ÜÇÏÁö¸¸, ¿ÀÁ÷ 256°³ÀÇ µ¶¸³¹®Àڵ鸸À» Çã¿ëÇÑ´Ù.
´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ Äڵ忡¼µµ, ¿¬¼ÓµÈ ¹®ÀÚµéÀº ¹ÙÀÌÆ®°¡ ¿¬¼ÓÇϰí ÀÖÀ½À» ÀǹÌÇÏÁö¸¸, °¢ ¹®ÀÚ´Â ÇÑ °³ ¶Ç´Â ´õ ¸¹Àº ¿¬¼ÓÀûÀÎ ¹ÙÀÌÆ®µéÀ» Á¡À¯Çϰí ÀÖÀ» °ÍÀÌ´Ù.
´ÙÁß¹ÙÀÌÆ® Äڵ带 ¼³°èÇÏ´Â ¸¹Àº ´Ù¸¥ ¹æ¹ýµéÀÌ ÀÖ´Ù; ´Ù¸¥ ½Ã½ºÅÛµéÀº ´Ù¸¥ ÄÚµåµéÀ» »ç¿ëÇÑ´Ù. ƯÁ¤ÇÑ Äڵ带 ¼³°èÇϱâ À§Çؼ´Â ƯÁ¤ÇÑ ¹®ÀÚ¸¦ ´ëÇ¥ÇÏ´Â ÇÑ ¹®ÀÚ¸¦ ¸î¹ÙÀÌÆ®(±âº» ¹ÙÀÌÆ® ½ÃÄö½º) ·Î ³ªÅ¸³¾°ÍÀÎÁö¸¦ Á¤ÇØ¾ß ÇÑ´Ù. ÄÄÇ»ÅÍ¿¡¼ ÇÑ ÄÚµå´Â ½ÇÁ¦·Î ±âº» ½ÃÄö½ºµéÀÇ Á¦ÇÑµÈ °³¼ö°¡Á®¾ß ¸¸ Çϰí, ±×µéÁß ¾î¶²°Íµµ À̰ͺ¸´Ù ±æ¾î¼´Â ¾ÈµÈ´Ù.
ÀÌµé ½ÃÄö½ºµéÀÌ ¸ðµÎ °°Àº ±æÀ̸¦ °¡Áú ÇÊ¿ä´Â ¾ø´Ù. ½ÇÁ¦·Î, ±×µéÁß ´ëºÎºÐÀº ´ÜÁö ÇѹÙÀÌÆ® ±æ À̸¦ °¡Áø´Ù. 0¿¡¼ 0177ÀÇ ¹üÀ§¿¡ ÀÖ´Â ±âº» ASCII ¹®ÀÚµéÀÌ Áß¿äÇϱ⠶§¹®¿¡, ±×·¡¼ ±×µéÀ» ¸ð µÎ ´ÙÁß¹ÙÀÌÆ® ÄÚµå·Î ³ªÅ¸³½´Ù. 0¿¡¼ 0177ÀÇ ¹üÀ§¿¡ ÀÖ´Â ÇÑ ¹ÙÀÌÆ®´Â ±× ÀÚü·Î ÇÑ ¹®ÀÚ¸¦ Ç¥Çö Çϰí ÀÖ´Ù. ÇÑ ¹ÙÀÌÆ®º¸´Ù ±ä ¹®ÀÚµéÀº 0200¿¡¼ 0377 ¹üÀ§¿¡ ÀÖ´Â ÇѹÙÀÌÆ®·Î Ç×»ó ½ÃÀ۵Ǿî¾ß¸¸ ÇÑ´Ù. ¹ÙÀÌÆ® °ª 0Àº ¹®ÀÚ¿À» ³¡³»±â À§Çؼ »ç¿ëµÉ ¼ö ÀÖ°í, Á¾Á¾ ASCII ¹®ÀÚµéÀÇ ¹®ÀÚ¿¿¡ »ç¿ë µÈ´Ù.
´ÜÀÏÇÑ ¹®ÀÚµéÀ» Ç¥ÇöÇÏ´Â ±âº» ¹ÙÀÌÆ® ½ÃÄö½º¸¦ Á¤ÇÏ´Â °ÍÀº ÀÚµ¿ÀûÀ¸ ·Î±ä ¹ÙÀÌÆ® ½ÃÄö½º¿¡ ÀÇ ¹Ì¸¦ ÁְԵȴÙ. ¿¹¸¦ µé¾î, µÎ °³ÀÇ ¹ÙÀÌÆ® ½ÃÄö½º 0205 049°¡ ±×¸®½º ¹®ÀÚ ¾ËÆÄ¸¦ ÀǹÌÇÑ´Ù¸é, 0205 049 065´Â ¾ËÆÄ µÚ¿¡ 'A'(ASCII ÄÚµå 065)°¡ µû¶ó¿ÈÀ» ³ªÅ¸³»°í, 0205 049 0205 049´Â ÀÏ·Ä·Î µÎ °³ÀÇ ¾ËÆÄ°¡ ÀÖÀ½À» ³ªÅ¸³½´Ù.
¸¸ÀÏ ¾î´À ¹ÙÀÌÆ® ½ÃÄö½º°¡ ¿©·¯ °¡ÁöÀÇ À¸¹Ì·Î ÇØ¼®µÉ ¼ö ÀÖ´Ù¸é, ±× ´ÙÁß¹ÙÀÌÆ® ÄÚµå´Â ÁÁÀº °Í ÀÌ ¾Æ´Ï´Ù. ½Ã½ºÅÛ¿¡¼ ÄÚµå´Â ½ÇÁ¦·Î ¸ðµÎ ´ÜÀÏÇÑ Àǹ̷Π»ç¿ëµÈ´Ù. ´ëºÎºÐÀÇ Äڵ忡¼ ¾î¶² ¹ÙÀÌ Æ®µéÀÇ ½ÃÄö½º´Â ¹®ÀÚ·Î½á ¾Æ¹«·± Àǹ̸¦ °¡ÁöÁö ¾Ê´Â´Ù. ±×µéÀ» À¯¿ëÇÏÁö ¾Ê´Ù¶ó°í ÇÑ´Ù.
°¡Àå °£´ÜÇÏ°í °¡´ÉÇÑ ´ÙÁß¹ÙÀÌÆ® Äڵ忡 ´ëÇÑ ÇѰ¡Áö :
´ÜÀÏÇÑ ¹ÙÀÌÆ®µé·Î ±¸¼ºµÈ ±âº» ½ÃÄö½º
ƯÁ¤ÇÑ ÄÚµå´Â ÀüÇô ´ÙÁß¹ÙÀÌÆ® Äڵ带 »ç¿ëÇÏÁö ¾Ê´Â´Ù. ±×°ÍÀº À¯¿ëÇÏÁö ¾ÊÀº ½ÃÄö½º°¡ ¾ø´Ù. ±×·¯³ª ¿ÀÁ÷ 256°³ÀÇ ¹®Àڵ鸸À» Ãë±ÞÇÒ ¼ö ÀÖ´Ù. À̰÷¿¡ 9376°³ÀÇ ´Ù¸¥ ¹®ÀÚµéÀ» ´Ù·ê ¼ö ÀÖ´Â ´Ù ¸¥ °¡´ÉÇÑ Äڵ尡 ÀÖ´Ù.
±âº» ½ÃÄö½ºÀÇ ±¸¼ºÀº.
둁 0¿¡¼ 0237Àº ´ÜÀÏÇÑ ¹ÙÀÌÆ®°ª.
둁 0240¿¡¼ 0377 ¹üÀ§¿¡ ÀÖ´Â °ªµéÀ» °¡Áø ¹ÙÀÌÆ® µÎ °³·Î µÎ °³-¹ÙÀÌÆ® ½ÃÄö½º
ÀÌ ÄÚµå¶Ç´Â ÀÌ¿Í À¯»çÇѰ͵éÀº ÀϺ»¾î ¹®ÀÚµéÀ» Ç¥ÇöÇϱâÀ§Çؼ ¾î¶² ½Ã½ºÅÛ¿¡¼ »ç¿ëµÈ´Ù. À¯¿ë ÇÏÁö ¾ÊÀº ½ÃÄö½º´Â 0240ºÎÅÍ 0377ÀÇ ¹üÀ§¿¡ ÀÖ´Â ¿¬¼ÓµÈ ¹ÙÀÌÆ®µéÀÇ °³¼ö°¡ Ȧ¼ö¶ó¸é À¯¿ëÇÏÁö ¾Ê Àº °ÍÀÌ´Ù.
¿©±â¿¡ ´õ ¸¹Àº È®ÀåµÈ ¹®ÀÚµéÀ» ´Ù·ê ¼ö ÀÖ´Â ´ÙÁß¹ÙÀÌÆ® Äڵ尡 ÀÖ´Ù. À̰ÍÀº ½ÇÁ¦·Î °ÅÀÇ 3000 ¸¸ ±îÁö µÈ´Ù.
±âº» ½ÃÄö½º ±¸¼ºÀº.
둁 0¿¡¼ 0177ÀÇ ¹üÀ§·Î´Â ´ÜÀÏÇÑ ¹ÙÀÌÆ®.
둁 ³× °³ÀÇ ¹ÙÀÌÆ®·Î ±¸¼ºµÈ ½ÃÄö½º¿¡¼ ù ¹øÂ° ¹ÙÀÌÆ®´Â 0200¿¡¼ 0237ÀÇ ¹üÀ§¸¦ °®°í, ³ª¸ÓÁö´Â 0240¿¡¼ 0377ÀÇ ¹üÀ§¸¦ °®´Â´Ù.
ÀÌ Äڵ忡¼, ¾î´À ½ÃÄö½º°¡ 0240¿¡¼ 0377ÀÇ ¹üÀ§ÀÇ ÇѹÙÀÌÆ®·Î ½ÃÀÛÇÏÁö ¾ÊÀ¸¸é À¯¿ëÇÏÁö ¾Ê´Ù.
±×¸®°í ¸¶Áö¸· ¹ÙÀÌÆ®¸¦ Á¦°ÅÇÔÀ¸·Î½á ¾î¶² À̵æÀ» °®°Å³ª, ÇÑ °³ÀÇ À¯¿ëÇÑ ¹®ÀÚ¸¦ ´ëÇ¥ÇÏ´Â ¹ÙÀÌ Æ®µéÀ» °¡Áö°í °áÄÚ ´Ù¸¥ À¯¿ëÇÑ ¹®ÀÚÀ» ¸¸µé¾î³¾ ¼ö ¾ø´Â ¹®ÀÚÄڵ尡 ÀÖ´Ù. (ÀÌ·± Ư¼ºÀº ´ç½ÅÀÌ Æ¯Á¤ÇÑ ¹®ÀÚµéÀÌ ÀÖ´Â ¹®ÀÚ¿À» Ž»öÇϰíÀÚ ÇÒ ¶§ Æí¸®ÇÏ´Ù. )
±âº» ½ÃÄö½º ±¸¼ºÀº.
둁 0¿¡¼ 0177ÀÇ ¹üÀ§·Î´Â ´ÜÀÏÇÑ ¹ÙÀÌÆ®.
둁 µÎ °³-¹ÙÀÌÆ® ½ÃÄö½º¿¡¼ ù ¹øÂ° ¹ÙÀÌÆ®´Â 0200¿¡¼ 0207ÀÇ ¹üÀ§¸¦ °®°í, µÎ ¹øÂ°´Â 0240¿¡¼ 0377ÀÇ ¹üÀ§¸¦ °®´Â´Ù.
둁 ¼¼ °³-¹ÙÀÌÆ® ½ÃÄö½º¿¡¼ ù ¹øÂ° ¹ÙÀÌÆ®´Â 0210¿¡¼ 0217ÀÇ ¹üÀ§¸¦ °®°í, ³ª¸ÓÁö ¹ÙÀÌÆ®µéÀº 0240¿¡¼ 0377ÀÇ ¹üÀ§¸¦ °®´Â´Ù.
둁 ³× °³-¹ÙÀÌÆ® ½ÃÄö½º¿¡¼ ù ¹øÂ° ¹ÙÀÌÆ®´Â 0220¿¡¼ 0227ÀÇ ¹üÀ§¸¦ °®°í, ³ª¸ÓÁö ¹ÙÀÌÆ®µéÀº 0240¿¡¼ 0377ÀÇ ¹üÀ§¸¦ °®´Â´Ù.
ÀÌ ÄÚµå·Î ±¸¼ºµÈ À¯¿ëÇÑ ½ÃÄö½ºµéÀº ±æ´Ù; À¯¿ëÇÑ ½ÃÄö½ºÀÇ ¿¹·Î 0240 °ú 0220 0300 065°¡ ÀÖ´Ù.
°¡´ÉÇÑ ´ÙÁß¹ÙÀÌÆ® ÄÚµåµéÀÇ °³¼ö´Â ¼¿¼ö°¡ ¾ø´Ù. ±×·¯³ª ÁÖ¾îÁø ÄÄÇ»ÅÍ ½Ã½ºÅÛÀº °íÀÛ ¸î °³ÀÇ ´Ù¸¥ ÄÚµåµéÀ» Áö¿øÇÒ °ÍÀÌ´Ù. ( ±×µé ÄÚµåµéÁß Çϳª´Â ¼öõ°³ÀÇ ´Ù¸¥ ¹®ÀÚµéÀ» Çã¿ëÇÒ °ÍÀÌ´Ù. ) ´Ù ¸¥ ÄÄÇ»ÅÍ ½Ã½ºÅÛÀº ÇÑ °³ÀÇ ¿ÏÀüÇÑ ´Ù¸¥ Äڵ带 Áö¿øÇÒ °ÍÀÌ´Ù. ÀÌ Àå¿¡¼ ¼³¸íµÈ ¶óÀ̺귯¸®µµ±¸ µéÀº ´ç½ÅÀÇ ÇÁ·Î±×·½¿¡¼ ±×µéÀ» ¾Ë Çʿ䰡 ¾øÀÌ Æ¯Á¤ ÄÄÇ»ÅÍ ½Ã½ºÅÛÀÇ ´ÙÁß¹ÙÀÌÆ® Äڵ忡 ´ëÇÑ ¼¼½ÉÇÑ Áö½Äµé·Î ²Ù·ÁÁ®Àֱ⠶§¹®¿¡ À¯¿ëÇÏ´Ù.
´ç½ÅÀÌ ÇöÀç ¼±ÅÃµÈ ´ÙÁß¹ÙÀÌÆ® Äڵ忡¼ Çѹ®ÀÚ¸¦ Ç¥ÇöÇÏ´Â ¹ÙÀÌÆ®µéÀÇ ÃÖ´ë °¡´É °³¼ö¸¦ ã±â À§Çؼ´Â Ç¥ÁØ ¸ÅÅ©·Î MB_CUR_MAX¸¦ »ç¿ëÇϰí, ´ç½ÅÀÇ ÄÄÇ»ÅÍ¿¡¼ Áö¿øµÇ´Â ¾î´À ´ÙÁß¹ÙÀÌÆ® Äڵ带 À§ÇÑ ÃÖ´ë °³¼ö¸¦ À§Çؼ´Â MB_LEN_MAX¸¦ »ç¿ëÇ϶ó.
¸ÅÅ©·Î : int MB__LEN__MAX
À̰ÍÀº ¾î´À Áö¿øµÈ Áö¿ªÀ»À§ÇÑ ÇÑ ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚÀÇÃÖ´ë ±æÀÌÀÌ´Ù. `limits.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.
¸ÅÅ©·Î : int MB__CUR__MAX
ÀÌ ¸ÅÅ©·Î´Â ÇöÀçÀÇ Áö¿ª¿¡¼ ÇÑ ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ¸¦ Ç¥ÇöÇÏ´Â ÃÖ´ë ¹ÙÀÌÆ®ÀÇ °³¼ö¸¦ ¾çÀÇ Á¤¼öÇ¥Çö À¸·Î(°¡´ÉÇϰԺñ-»ó¼ö)È®ÀåÇÑ´Ù. ±× °ªÀº °áÄÚ MB_LEN_MAXº¸´Ù ±æ ¼ö°¡ ¾ø´Ù.
MB_CUR_MAX´Â `stdlib.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.
º¸Åë, ƯÁ¤ ¹®ÀÚ ÄÚµå¾È¿¡ ÀÖ´Â °¢°¢ÀÇ ±âº» ½ÃÄö½º´Â ÇÑ ¹®ÀÚ¸¦ ³ªÅ¸³½´Ù. °°Àº ´ÙÁß ¹ÙÀÌÆ® ¹®ÀÚ ÄÚµåµéÀº ÇÑ shift »óȲÀ» °®´Â´Ù; ¾î¶² ÄÚµåµé¿¡¼´Â, ½¬ÇÁÆ® ½ÃÄö½º¶ó°í ºÒ¸®´Â ´Ù¸¥ ½¬ÇÁÆ® »óȲ À¸·Î º¯°æÇϰí, ¾î¶² ¶Ç´Â, ¸ðµç ±âº» ½ÃÄö½ºµéÀÇ Àǹ̴ ÇöÀçÀÇ ½¬ÇÁÆ® »óȲ¿¡ µû¸¥´Ù. ½ÇÁ¦·Î, ±â º» ½ÃÄö½ºÀÇ ÁýÇÕÀº ½ÉÁö¾î ÇöÀçÀÇ ½¬ÇÁÆ® »óȲ¿¡ ÀÇÁ¸ÇÏ¿© ´Þ¶óÁú °ÍÀÌ´Ù. ÀÌ ÄÚµåÀÇ Á¾·ù¸¦ ´Ù·ç ´Â°Í¿¡ ´ëÇÑ Á¤º¸´Â 18.9Àý [Shift State] 256 ÆäÀÌÁö¸¦ ÂüÁ¶Ç϶ó.
Æ÷ÇÔµÈ ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ¿À» ±×µé¿¡ ´ëÇØ¼ ¾ËÁö ¸øÇÏ´Â ÇÔ¼ö¿¡°Ô ÁÖ·Á ½ÃµµÇÒ ¶§ ¹«½¼ÀÏÀÌ ÀÏ¾î ³¯°ÍÀΰ¡? º¸Åë, ÇÔ¼ö´Â ¹ÙÀÌÆ®µéÀÇ ½ÃÄö½º·Î ¹®ÀÚ¿À» Ãë±ÞÇϰí, Ưº°ÇÑ ¾î¶² ¹ÙÀÌÆ®°ªÀ¸·Î ÇØ¼®ÇÑ ´Ù; ¸ðµç ´Ù¸¥ ¹ÙÀÌÆ® °ªµéÀº "º¸Åë"ÀÌ´Ù. ´ÙÁß¹ÙÀÌÆ®ÀÇ ±æÀ̸¦ °¡Áø ¹®ÀÚ°¡ ¾î´À Ưº°ÇÑ ¹ÙÀÌÆ® °ªµéÀ» Æ÷ÇÔÇÏÁö ¾ÊÀ¸¸é, ±× ÇÔ¼ö´Â ¸î °³ÀÇ º¸Åë ¹®ÀÚó·³ ±×µéÀ» Ãë±ÞÇÒ °ÍÀÌ´Ù.
¿¹¸¦µé¾î, ¸¸ÀÏ ´ç½ÅÀÌ ÆÄÀÏÀÇ À̸§À¸·Î ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚµéÀ» »ç¿ëÇÑ´Ù¸é ¹«¾ùÀÌ ¹ß»ýÇÒÁö¸¦ »ý°¢ ÇØº¸ÀÚ. open°ú unlink¿Í °°Àº ÇÔ¼öµéÀº Ưº°ÇÑ °ªÀ¸·Î `/'¿Í ÇÔ²², ¿¬¼ÓµÈ ¹ÙÀÌÆ®µéÀÇ ½ÃÄö½º·Î ±× À̸§À» Ãë±ÞÇÏ¿© ÇÔ¼öÀ̸§À» °¡Áö°í µ¿ÀÛÇÑ´Ù. ¾î´À ´Ù¸¥ ¹ÙÀÌÆ® °ªµéÀÌ ½ÃÄö½º·Î º¹»çµÇ°Å³ª ºñ±³ µÇ¸é, ¸ðµç ¹ÙÀÌÆ® °ªµéÀº À¯»çÇÏ°Ô Ãë±ÞµÈ´Ù. ±×·¯¸é, ´ç½ÅÀº ¿¬¼ÓµÈ ¹ÙÀÌÆ®µé·Î ±¸¼ºµÈ ÆÄÀÏÀ̸§À¸ ·Î »ý°¢Çϰųª, ¶Ç´Â ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚµéÀÌ Æ÷ÇÔµÈ ¹®ÀÚ¿·Î »ý°¢ÇÒ °ÍÀÌ´Ù; ±× °°Àº µ¿ÀÛÀº `/'¸¦ Æ÷ÇÔÇÏÁö ¾ÊÀº ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ¿¡µµ °°Àº ¹æ¹ýÁß Çϳª·Î ÀÌÇØµÉ °ÍÀÌ´Ù.
18.4 ¿ÍÀ̵å ij¸¯ÅÍ¿¡ ´ëÇÑ ¾È³».
¿ÍÀ̵å ij¸¯ÅÍ´Â ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚº¸´Ù´Â ¸¹ÀÌ °£´ÜÇÏ´Ù. ±×µéÀº 8ºñÆ® ÀÌ»óÀ» °¡Áö°í ¹®ÀÚµéÀ» Ç¥ ÇöÇϱ⠶§¹®¿¡, 256°³º¸´Ù´Â ¸¹Àº ¹®ÀÚµéÀ» Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ¿ÍÀ̵å ij¸¯ÅÍ µ¥ÀÌÅÍ Å¸ÀÔ, wchar_t´Â ±Ô°ÝÈµÈ ASCII ÄÚµå´Â ¹°·Ð È®ÀåµÈ ¹®ÀÚ ÄÚµåµéÀ» ÀúÀåÇϱ⿡ ÃæºÐÇÑ ¹üÀ§¸¦ °®°í ÀÖ´Ù.
¿ÍÀ̵å ij·°ÅÍÀÇ »ç¿ëÀ¸·Î °®´Â À̵æÀº °¢°¢ÀÇ ¹®ÀÚ°¡ º¸ÅëÀÇ ASCII ¹®ÀÚµé ó·³, ´ÜÀÏÇÑ µ¥ÀÌÅÍ ¿ÀºêÁ§Æ®¶ó´Â °ÍÀÌ´Ù. ±×·¸Áö¸¸ ¿ÍÀ̵å ij·°Å͵éÀº ¸î°¡Áö ºÒÆíÇÔÀ» ³»Æ÷Çϰí ÀÖ´Ù.
둁 ÇÁ·Î±×·¥ÀÌ ¿ÍÀ̵å ij¸¯Å͸¦ »ç¿ëÇÏ·Á¸é ¼öÁ¤µÇ°í ÀçÄÄÆÄÀÏ µÇ¾î¾ß¸¸ ÇÑ´Ù.
둁 ¿ÍÀ̵å ij¸¯ÅÍ·Î ÀÌ·ç¾îÁø ÆÄÀϵéÀº º¸ÅëÀÇ ¹®ÀÚµéÀ» Á¦¿ÜÇϰí´Â ÇÁ·Î±×·¥¿¡ ÀÇÇØ ÀÐÇôÁú ¼ö ¾ø ´Ù.
¿ÍÀ̵å ij·°ÅÍ °ª, 0¿¡¼ 0177 »çÀÌ´Â Ç×»ó ASCII ¹®ÀÚ ÄÚµå¿Í µ¿ÀÏÇÏ´Ù. ¿ÍÀ̵å ij·°ÅͰª 0Àº , 0 ÀÇ °ªÀ» °¡Áø ´ÜÀÏÇÑ ¹ÙÀÌÆ®°¡ º¸ÅëÀÇ ¹®ÀÚµé·Î ÀÌ·ç¾îÁø ¹®ÀÚ¿À» Á¾·áÇϴµ¥ »ç¿ëµÇ´Â°Íó·³, ¿Í À̵å ij¸¯Å͵é·Î ÀÌ·ç¾îÁø ¹®ÀÚ¿À» Á¾·áÇϴµ¥ »ç¿ëµÈ´Ù.
µ¥ÀÌÅÍ Å¸ÀÔ : wchar__t
À̰ÍÀº Áö¿øµÈ Áö¿ªµé¿¡¼ »ç¿ëµÇ´Â È®ÀåµÈ ¹®ÀÚ °ªµéÀ» ¸ðµÎ Ç¥ÇöÇϱ⿡ ÃæºÐÈ÷ Å« ¹üÀ§¸¦ °¡Áø Á¤¼öÇüÀ¸·Î "¿ÍÀ̵å ij·°ÅÍ"ÀÇ µ¥ÀÌÅÍ ÇüÀÌ´Ù. Áö¿ª¿¡ ´ëÇÑ Á¤º¸´Â 19Àå [Locales] 259 ÆäÀÌÁö¸¦Âü Á¶Ç϶ó. ÀÌ ÇüÀº Çì´õÆÄÀÏ 'stddef.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.
¸¸ÀÏ ´ç½ÅÀÇ ½Ã½ºÅÛÀÌ È®ÀåµÈ ¹®ÀÚµéÀ» Áö¿øÇÑ´Ù¸é, °¢°¢ÀÇ È®ÀåµÈ ¹®ÀÚµéÀº ÇÑ °³ÀÇ ¿ÍÀ̵å ij¸¯ ÅÍ ÄÚµå¿Í ±×¿¡ ÇØ´çÇÏ´Â ´ÙÁß¹ÙÀÌÆ® ±âº» ½ÃÄö½º¸¦ µÑ´Ù °®´Â´Ù.
18.5 È®ÀåµÈ ¹®ÀÚ¿ÀÇ º¯È¯.
mbstowcsÇÔ¼ö´Â ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚµé·Î ÀÌ·ç¾îÁø ¹®ÀÚ¿À» ¿ÍÀ̵å ij¸¯ÅÍ ¹è¿·Î º¯È¯ÇÑ´Ù. wcstombs ÇÔ¼ö´Â ±× ¿ªº¯È¯À» ÇÑ´Ù. À̵é ÇÔ¼öµéÀº Çì´õÆÄÀÏ 'stdlib.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
´ëºÎºÐÀÇ ÇÁ·Î±×·¥¿¡¼, À̵é ÇÔ¼öµéÀº ¿ÍÀÌµå ¹®ÀÚ¿°ú ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ¿ »çÀÌÀÇ º¯È¯À» À§Çؼ ´ç½ÅÀÌ ÇÊ¿äÇÑ °ÍµéÀÌ´Ù. ±×·¯³ª ±×µéÀº Á¦ÇѵéÀ» °®´Â´Ù. ¸¸ÀÏ ´ç½ÅÀÇ µ¥ÀÌÅͰ¡ ³Î¹®ÀÚ·Î ³¡³ªÁö ¾Ê°Å³ª, µ¿½Ã¿¡ ¸ðµÎ ÄÚ¾î ¾È¿¡ ÀÖÁö ¾Ê´Ù¸é, ´ç½ÅÀº ¾Æ¸¶µµ ÇÑ ¹ø¿¡ ÇÑ ¹®ÀÚ¸¦ º¯È¯ÇÏ´Â Àú-¼öÁØ º¯È¯ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÒ°ÍÀÌ´Ù. 18.7Àý [Converting One Char], 253 ÆäÀÌÁö ÂüÁ¶.
ÇÔ¼ö :
size_t mbstowcs (wchar_t *wstring, const char *string, size_t size)
mbstowcs("´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ¿À» ¿ÍÀ̵å ij¸¯ÅÍ ¹®ÀÚ¿·Î")ÇÔ¼ö´Â ³Î Á¾·á ¹®ÀÚ·Î ³¡³ª´Â ´ÙÁß¹ÙÀÌ Æ® ¹®ÀÚµé·Î ÀÌ·ç¾îÁø ¹®ÀÚ¿À» ¿ÍÀ̵å ij¸¯ÅÍ ÄÚµåµéÀÇ ¹è¿·Î º¯È¯ÇÑ´Ù. ±× ¹è¿Àº wstring¿¡¼ ½ÃÀÛÇÏ´Â ¹è¿¿¡ ¿ÍÀÌµå ¹®ÀÚµéÀ» ÀúÀåÇϴµ¥, ±× ¹è¿ÀÇ Å©±â°¡ sizeº¸´Ù´Â Ŭ ¼ö ¾ø´Ù. sizeÀÇ Å© ±â¿¡´Â ³Î Á¾·á¹®ÀÚ°¡ Æ÷ÇÔµÇÁö ¾Ê¾Ò´Ù, ±×·¡¼ ¸¸ÀÏ size°¡ ÀÌ ÇÔ¼öÀÇ ½ÇÇà °á°úÀÎ ¹®ÀÚ¿¿¡¼ ¿ÍÀÌ µå ij·°ÅÍÀÇ ½ÇÁ¦ °³¼öº¸´Ù ÀÛ¾Ò´Ù¸é, ³Î Á¾·á¹®ÀÚ´Â ÀúÀåµÇÁö ¾Ê°ÔµÈ´Ù.
¹®ÀÚ¿À» °¡Áö°í ¹®ÀÚµéÀ» º¯È¯ÇÏ´Â °ÍÀº Ãʱ⠽¬ÇÁÆ® »óȲÀ¸·Î ½ÃÀÛÇÑ´Ù. ¸¸ÀÏ À¯¿ëÇÏÁö ¾ÊÀº ´Ù Áß¹ÙÀÌÆ® ¹®ÀÚ ½ÃÄö½º°¡ ¹ß°ßµÇ¸é, ÀÌ ÇÔ¼ö´Â -1ÀÇ °ªÀ» ¸®ÅÏÇϰí, ±×·¸Áö¾Ê´Ù¸é, ¹è¿ wstring¿¡ ÀúÀå µÈ ¿ÍÀ̵å ij·°ÅÍÀÇ °³¼ö¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ °³¼ö´Â ³Î Á¾·á¹®ÀÚ°¡ Æ÷ÇÔµÇÁö ¾ÊÀº °ÍÀ¸·Î ¸¸ÀÏ °³¼ö°¡ sizeº¸´Ù ÀÛÀ¸¸é ³Î Á¾·á¹®ÀÚ°¡ ÀúÀåµÈ´Ù.
´ÙÀ½Àº °á°ú¸¦ ÀúÀåÇϱ⿡ ÃæºÐÇÑ °ø°£À» ÇÒ´çÇØ¼, ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ¿À» ¾î¶»°Ô º¯È¯ÇÏ´ÂÁö¸¦ º¸¿© ÁÖ´Â ¿¹Á¦ÀÌ´Ù.
wchar_t *
mbstowcs_alloc (const char *string)
{
size_t size = strlen (string) + 1;
wchar_t *buf = xmalloc (size * sizeof (wchar_t));
size = mbstowcs (buf, string, size);
if (size == (size_t) -1)
return NULL;
buf = xrealloc (buf, (size + 1) * sizeof (wchar_t));
return buf;
}
ÇÔ¼ö :
size_t wcstombs (char *string, const wchar_t wstring, size_t size)
wcstombs("¿ÍÀ̵å ij·°ÅÍ ¹®ÀÚ¿À» ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ¿·Î")ÇÔ¼ö´Â ³Î Á¾·á¹®ÀÚ·Î ³¡³ª´Â ¿ÍÀ̵å ij ·°ÅÍ ¹è¿ wstringÀ» ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ¿·Î º¯È¯ÇÏ´Â ÇÔ¼ö·Î, string¿¡¼ ½ÃÀÛÇÏ¿© size ¹ÙÀÌÆ®º¸´Ù Å©Áö¾Ê°Ô ÀúÀåÇϴµ¥, ±× sizeÀÇ Å©±â°¡ º¯È¯µÈ ¹®ÀÚ¿À» ÀúÀåÇϱ⿡ ÃæºÐÇÏ´Ù¸é ³Î Á¾·á¹®ÀÚµµ ÀúÀå µÈ´Ù. ¹®ÀÚµéÀÇ º¯È¯Àº Ãʱ⠽¬ÇÁÆ® »óȲÀ¸·Î ½ÃÀÛÇÑ´Ù.
³Î Á¾·á¹®ÀÚ´Â sizeÀÇ Å©±â¿¡ Æ÷ÇÔµÇÁö ¾Ê±â ¶§¹®¿¡, ¸¸ÀÏ sizeÀÇ Å©±â°¡ wstring¿¡¼ ÇÊ¿ä·ÎÇÏ´Â ¹Ù ÀÌÆ®ÀÇ °³¼ö¿Í °°°Å³ª ´õ Àû´Ù¸é, ³Î Á¾·á¹®ÀÚ´Â ÀúÀåµÇÁö ¾Ê´Â´Ù. ¸¸ÀÏ À¯¿ëÇÑ ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ¿¡ ÇØ´çµÇÁö ¾ÊÀº Äڵ尡 ¹ß°ßµÇ¸é, ÀÌ ÇÔ¼ö´Â -1ÀÇ °ªÀ» ¸®ÅÏÇÑ´Ù. ±×·¸Áö¾Ê´Ù¸é, ¸®ÅϰªÀº ¹è¿ string ¿¡ ÀúÀåµÈ ¹ÙÀÌÆ®µéÀÇ °³¼öÀÌ´Ù. ÀÌ °³¼ö´Â ³Î Á¾·á¹®ÀÚ°¡ Æ÷ÇÔµÇÁö ¾ÊÀº °ÍÀ¸·Î, ±× °³¼ö°¡ size º¸ ´Ù Àû´Ù¸é ³Î Á¾·á¹®ÀÚ°¡ ÀúÀåµÈ °ÍÀÌ´Ù.
18.6 ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ ±æÀÌ.
ÀÌ ÀýÀº ´ÙÁß ¹ÙÀÌÆ® ¹®ÀÚµé·Î ÀÌ·ç¾îÁø ¹®ÀÚ¿À» ÇÑ ¹ø¿¡ Çѹ®ÀÚ¾¿ ¾î¶»°Ô Á¶»çÇÏ´ÂÁö¸¦ ¼³¸íÇÏ °í ÀÖ´Ù. ÀÌ·±ÀÏÀ» Çϴµ¥ µû¸£´Â ¾î·Á¿òÀº °¢°¢ÀÇ ÇÑ ¹®ÀÚ°¡ ¸î °³ÀÇ ¹ÙÀÌÆ®·Î ÀÌ·ç¾îÁ³´ÂÁö¸¦ ¾Ë ¾Æ¾ßÇÏ´Â °ÍÀÌ´Ù. ´ç½ÅÀº À̰ÍÀ» ÆÇ´ÜÇϴµ¥ mblen ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÇÔ¼ö : int mblen (const char *string, size_t size)
³Î Á¾·á¹®ÀÚ°¡ ¾ø´Â ¹®ÀÚ¿À» °¡Áö°í mblenÇÔ¼ö¸¦ »ç¿ëÇϸé, string¿¡¼ ½ÃÀÛÇÏ¿© ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ ¸¦ ±¸¼ºÇÏ´Â ¹ÙÀÌÆ®ÀÇ °³¼ö¸¦ ¸®ÅÏÇϴµ¥, size¹ÙÀÌÆ® ¸¸Å¸¸ ½ÃÇèÇÑ´Ù. ( ¿©±â¼ size´Â ´ç½ÅÀ̰¡Áö °í ÀÖ´Â µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ®ÀÇ °³¼ö·Î °ø±ÞÇÑ´Ù.) mblenÀÇ ¸®ÅϰªÀº ¼¼°¡Áö °¡´É¼ºÀ¸·Î ±¸ºÐµÈ´Ù: stringÀÇ Ã¹ ¹øÂ° size ¹ÙÀÌÆ®µéÀÌ À¯¿ëÇÑ ¹®ÀÚ·Î ½ÃÀÛÇÑ´ÂÁö, À¯¿ëÇÏÁö ¾ÊÀº ¹ÙÀÌÆ® ½ÃÄö½º·Î ½ÃÀÛ Çϰųª ´ÜÁö ÇÑ ¹®ÀÚÀÇ ÀϺÎÀÎÁö, ºñ¾îÀÖ´Â ¹®ÀÚ¿ÀÎÁö. À¯¿ëÇÑ ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ¿¡¼´Â, mblenÀº ±× ¹®ÀÚ(Àû¾îµµ ÇÑ °³ ÀÌ»óÀ̰í, °áÄÚ sizeº¸´Ù Ä¿¼´Â ¾ÈµÈ´Ù)ÀÇ ¹ÙÀÌÆ®µéÀÇ °³¼ö¸¦ ¸®ÅÏ ÇÑ´Ù. À¯¿ëÇÏ Áö ¾ÊÀº ¹ÙÀÌÆ® ½ÃÄö½º¿¡¼´Â, mblenÀº -1À» ¸®ÅÏÇÑ´Ù. ºñ¾îÀÖ´Â ¹®ÀÚ¿¿¡¼´Â, 0À» ¸®ÅÏÇÑ´Ù. ¸¸ÀÏ ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ Äڵ尡 ½¬ÇÁÆ® ¹®ÀÚµéÀ» »ç¿ëÇÑ´Ù¸é, mblenÀº ±×°ÍÀ» Á¶»çÇØ¼ ½¬ÇÁÆ® »óȲÀ» °»½Å Çϰí À¯ÁöÇÑ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ stringÀ¸·Î ³Î Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ¿© mblenÀ» È£ÃâÇÑ´Ù¸é, Ç¥ÁØ Ãʱ⠰ªÀ¸ ·Î ½¬ÇÁÆ® »óȲÀ» ÃʱâÈÇÑ´Ù. ±×°ÍÀº ¸¸ÀÏ ½ÇÁ¦·Î »ç¿ëµÈ ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ Äڵ尡 ½¬ÇÁÆ® »óȲÀ» °®°í ÀÖ´Ù¸é 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇÑ´Ù. 18.9Àý [Shift State] 256 ÆäÀÌÁö¸¦ ÂüÁ¶Ç϶ó. mblen ÇÔ¼ö´Â `stdlib.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
18.7 ÀÏ ´ë ÀÏ·Î È®ÀåµÈ ¹®ÀÚµéÀÇ º¯È¯.
´ç½ÅÀº mbtowc ÇÔ¼ö¸¦ »ç¿ëÇØ¼, ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ¸¦ ÇÑ ¹ø¿¡ ÇÑÀÚ¾¿ ¿ÍÀ̵å ij¸¯ÅÍ·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù. wctomb ÇÔ¼ö´Â ±× ¹Ý´ë ÀÛ¿ëÀ» ÇÑ´Ù. À̵é ÇÔ¼öµéÀº `stdlib.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö :
int mbtowc (wchar_t *result, const char *string, size_t size)
mbtowc( ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ¸¦ ¿ÍÀ̵å ij¸¯ÅÍ·Î ) ÇÔ¼ö´Â ³Î Á¾·á ¹®ÀÚ°¡ ¾ø´Â ¹®ÀÚ¿À» °¡Áö°í È£Ãâ ÇßÀ» ¶§, stringÀÇ Ã³À½¿¡ Àִ ù ¹øÂ° ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ¸¦ ±×¿¡ ÇØ´çÇÏ´Â ¿ÍÀ̵å ij¸¯ÅÍ ÄÚµå·Î º¯ ȯÇÑ´Ù. ±×°ÍÀº °á°ú¸¦ *result¿¡ ÀúÀåÇÑ´Ù. mbtowc´Â size ¹ÙÀÌÆ® ¸¸Å¸¸ ½ÃÇèÇÑ´Ù.( size´Â ´ç½Å ÀÌ °¡Áö°í ÀÖ´Â µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ®ÀÇ °³¼ö·Î °ø±ÞÇÑ´Ù. ) ³Î Á¾·á¹®ÀÚ°¡ ¾ø´Â stringÀ¸·Î È£ÃâµÈ mbtowc´Â ¼¼°¡Áö °¡´É¼ºÀ¸·Î ±¸ºÐµÈ´Ù: string¿¡ Àִ ù ¹øÂ° size ¹ÙÀÌÆ®µéÀÌ À¯¿ëÇÑ ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ·Î ½ÃÀÛÇÏ´ÂÁö, ±×µéÀÌ À¯¿ëÇÏÁö ¾Ê´Â ¹ÙÀÌÆ® ½ÃÄö½º·Î ½ÃÀÛÇϰųª ´ÜÁö ÇÑ ¹®ÀÚÀÇ ÀϺκÐÀÎÁö, ¶Ç´Â stringÀÌ ºñ¾îÀÖ´Â( ÇÑ °³ÀÇ ³Î ¹®ÀÚ) ¹®ÀÚ¿À» °¡¸®Å°´ÂÁö. À¯¿ëÇÑ ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ¶ó¸é, mbtowc ´Â ±×°ÍÀº ¿ÍÀ̵å ij¸¯ÅÍ·Î º¯È¯ÇÏ¿© *result¿¡ ÀúÀåÇϰí, ±× ¹®ÀÚÀÇ ¹ÙÀÌÆ® °³¼ö¸¦ ¸®ÅÏÇÑ ´Ù ( Àû¾îµµ ÇÑ °³ ÀÌ»óÀ̰í, °áÄÚ sizeº¸´Ù Ä¿¼´Â ¾ÈµÈ´Ù.). À¯¿ëÇÏÁö ¾ÊÀº ¹ÙÀÌÆ® ½ÃÄö½º¶ó¸é, mbtowc´Â -1À» ¸®ÅÏÇÑ´Ù. ºñ¾îÀÖ´Â ¹®ÀÚ¿À̶ó¸é, 0À» ¸®ÅÏÇϰí, ¶ÇÇÑ *result¿¡µµ 0À» ÀúÀåÇÑ´Ù. ¸¸ÀÏ ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ Äڵ尡 ½¬ÇÁÆ® »óȲÀ» »ç¿ëÇÑ´Ù¸é, mbtowc´Â ±×°ÍÀ» °Ë»çÇÏ¿© ½¬ÇÁÆ® »óȲÀ» À¯ÁöÇÏ°í °»½ÅÇÑ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ string¿¡ ³Î Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ¿© mbtowc¸¦ È£ÃâÇϸé, ±×°ÍÀº Ç¥ÁØ ÃʱⰪÀ¸·Î ½¬ÇÁÆ® »óȲÀ» ÃʱâÈ ÇÑ´Ù. ±×°ÍÀº ¶ÇÇÑ ¸¸ÀÏ »ç¿ëÇϰí ÀÖ´Â ´ÙÁß¹ÙÀÌÆ® Äڵ尡 ½¬ÇÁ Æ® »óȲÀ» °®°í ÀÖ´Ù¸é 0ÀÌ ¾Æ´Ñ°ªÀ» ¸®ÅÏÇÑ´Ù. 18.9Àý [Shift State] 256 ÆäÀÌÁö ÂüÁ¶.
ÇÔ¼ö : int wctomb (char *string, wchar_t wchar)
wctomb("¿ÍÀ̵å ij¸¯Å͸¦ ´ÙÁß¹ÙÀÌÆ®·Î") ÇÔ¼ö´Â ¿ÍÀ̵å ij·°ÅÍ ÄÚµå wcharÀ» ±×¿¡ ÇØ´çÇÏ´Â ´ÙÁß ¹ÙÀÌÆ® ½ÃÄö½º·Î º¯È¯Çϰí, ±× °á°ú¸¦ stringÀÇ ÁÖ¼Ò¿¡¼ ½ÃÀÛÇÏ´Â ¹ÙÀÌÆ®µé¿¡ ÀúÀåÇÑ´Ù. ¾Æ¹«¸® ¸¹ ¾Æµµ MB_CUR_MAX ¹®ÀÚµéÀÌ ÀúÀåµÈ´Ù. ³Î Á¾·á¹®ÀÚ°¡ ¾ø´Â ¹®ÀÚ¿À» °¡Áö°í È£ÃâµÈ wctomb ÇÔ ¼ö´Â ¼¼°¡Áö °¡´É¼ºÀ¸·Î ±¸ºÐÇÑ´Ù: À¯¿ëÇÑ ¿ÍÀ̵å ij¸¯ÅÍ ÄÚµå( ´ÙÁß ¹ÙÀÌÆ® ¹®ÀÚ·Î º¯È¯µÉ ¼ö ÀÖ ´Â °Í.), À¯¿ëÇÏÁö ¾ÊÀº ÄÚµå, ±×¸®°í 0. À¯¿ëÇÑ Äڵ尡 ÁÖ¾îÁø wctomb´Â ±×°ÍÀº ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ·Î º¯È¯Çϰí stringÀ» ½ÃÀÛÀ¸·Î ¹ÙÀÌÆ®µéÀ» ÀúÀåÇÑ´Ù. ±×¸®°í ±×°ÍÀº ±× ¹®ÀÚÀÇ ¹ÙÀÌÆ®µéÀÇ °³¼ö¸¦ ¸® ÅÏÇÑ´Ù( Àû¾îµµ ÇÑ °³ ÀÌ»óÇϰí, °áÄÚ sizeº¸´Ù Ä¿¼´Â ¾ÈµÈ´Ù.). ¸¸ÀÏ wcharÀÌ À¯¿ëÇÏÁö ¾ÊÀº ¿ÍÀÌ µå ij¸¯ÅÍ ÄÚµå¶ó¸é, wctomb´Â -1À» ¸®ÅÏÇÑ´Ù. ¸¸ÀÏ wcharÀÌ 0À̶ó¸é, ±×°ÍÀº 0À» ¸®ÅÏÇϰí, ¶ÇÇÑ *string¿¡µµ 0À» ÀúÀåÇÑ´Ù. ¸¸ÀÏ ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ Äڵ尡 ½¬ÇÁÆ® ¹®ÀÚµéÀ» »ç¿ëÇÑ´Ù¸é, wctomb´Â ±× °ÍÀ» Á¶»çÇØ¼ ½¬ÇÁÆ® »óȲÀ» °»½ÅÇϰí À¯ÁöÇÑ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ stringÀ¸·Î ³Î Æ÷ÀÎÅ͸¦ »ç¿ëÇØ¼ wctomb¸¦ È£ÃâÇÑ´Ù¸é, Ç¥ÁØ ÃʱⰪÀ¸·Î ½¬ÇÁÆ® »óȲÀ» ÃʱâÈ ÇÑ´Ù. ¸¸ÀÏ »ç¿ëÇϰí ÀÖ´Â ´ÙÁß¹ÙÀÌ Æ® ¹®ÀÚ Äڵ尡 ½ÇÁ¦·Î ½¬ÇÁÆ® »óȲÀ» °®´Â´Ù¸é 0ÀÌ ¾Æ´Ñ°ªÀ» ¸®ÅÏÇÑ´Ù. 18.9Àý [Shift State] 256 ÆäÀÌÁö ÂüÁ¶.
wchar¿¡ 0À» ³Ö°í, stringÀÌ nullÀÌ ¾Æ´Ñ °ÍÀ» °¡Áö°í ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϸé, ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ 0À» Àú ÀåÇϰí 0À» ¸®ÅÏÇϴ°ÍÀº ¹°·ÐÀ̰í ÀúÀåµÈ ½¬ÇÁÆ® »óȲÀ» ´Ù½Ã ÃʱâÈ ÇÏ´Â ºÎÀÛ¿ëÀ» °®´Â´Ù.
18.8 ¹®ÀÚ ´ë ¹®ÀÚ º¯È¯ÀÇ ¿¹Á¦
±â¼úÀÚ input À¸·ÎºÎÅÍ ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ ÅØ½ºÆ®¸¦ ÀÐ¾î¼ ±×¿¡ ÇØ´çÇÏ´Â ¿ÍÀ̵å ij·°Å͵éÀ» ±â¼úÀÚ output¿¡ ¾²´Â ¿¹Á¦ ÇÁ·Î±×·¥ÀÌ´Ù. ¿ì¸®°¡ ÀÌ ¿¹Á¦¿¡¼ ÀÏ´ëÀÏ·Î ¹®ÀÚµéÀ» º¯È¯ÇÏ·ÁÇÑ °ÍÀº mbstowcs ÇÔ¼ö°¡ ³Î ¹®ÀÚ°¡ ÀÖ´Ù¸é º¯È¯À» °è¼ÓÇÏÁö ¾Ê°í, ÀоîµéÀÎ ¸¹Àº ÀÔ·ÂÁß¿¡ ºÎºÐÀûÀ¸·Î À¯ ¿ëÇÏÁö ¾ÊÀº ¹®ÀÚ°¡ ÀÖ´Ù¸é À̰Ϳ¡ ¿ÏÀüÇÏ°Ô ´ëóÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù.
int
file_mbstowcs (int input, int output)
{
char buffer[BUFSIZ + MB_LEN_MAX];
int filled = 0;
int eof = 0;
while (!eof)
{
int nread;
int nwrite;
char *inp = buffer;
wchar_t outbuf[BUFSIZ];
wchar_t *outp = outbuf;
/* ÀÔ·Â ÆÄÀϷκÎÅÍ ¹öÆÛ¸¦ ä¿î´Ù. */
nread = read (input, buffer + filled, BUFSIZ);
if (nread < 0)
{
perror ("read");
return 0;
}
/* ¸¸ÀÏ ÆÄÀÏÀÇ ³¡¿¡ µµ´ÞÇϸé, ´õ ÀÌ»ó ÀÐÁö¾Êµµ·Ï ±â·ÏÇ϶ó*/
if (nread == 0)
eof = 1;
/* filled´Â ¹öÆÛ¿¡ ÀÖ´Â ¹ÙÀÌÆ®ÀÇ °³¼öÀÌ´Ù. */
filled += nread;
/* ±×µé ¹ÙÀÌÆ®µéÀ» ¿ì¸®°¡ ÇÒ¼ö ÀÖ´Â ÇÑ ¸¹ÀÌ ¿ÍÀ̵å ij¸¯ÅÍ·Î º¯È¯Ç϶ó. */
while (1)
{
int thislen = mbtowc (outp, inp, filled);
/* À¯¿ëÇÏÁö ¾ÊÀº ¹®ÀÚ¿¡¼ º¯È¯À» ¸ØÃç¶ó; À̰ÍÀº À¯¿ëÇÑ ¹®ÀÚÀÇ ´ÜÁö ù ¹øÂ° ºÎºÐÀ» ÀоúÀ½À» ÀǹÌÇÑ´Ù. */
if (thislen == -1)
break;
/* ³Î ¹®ÀÚ¸¦ ´Ù¸¥ ¹®ÀÚó·³ Ãë±ÞÇ϶ó, ±×·¯³ª ¶ÇÇÑ ½¬ÇÁÆ® »óȲÀ» Àç¼³Á¤Ç϶ó. */
if (thislen == 0) {
thislen = 1;
mbtowc (NULL, NULL, 0);
}
/* ÀÌ ¹®ÀÚ¸¦ Áö³ª¼ ÁøÇàÇ϶ó. */
inp += thislen;
filled -= thislen;
outp++;
}
/* ¿ì¸®°¡ ¸¸µé¾ú´ø ¿ÍÀ̵å ij·°Å͵éÀ» ±â·ÏÇ϶ó */
nwrite = write (output, outbuf, (outp - outbuf) * sizeof (wchar_t));
if (nwrite < 0)
{
perror ("write");
return 0;
}
/* ¸¸ÀÏ ¿ì¸®°¡ ½ÇÁ¦ À¯¿ëÇÏÁö ¾ÊÀº ¹®ÀÚ¸¦ °¡Á³´ÂÁö º¸ÀÚ. */
if((eof && filled > 0) || filled >= MB_CUR_MAX)
{
error ("invalid multibyte character");
return 0;
}
/* ¸¸ÀÏ ¾î´À ¹®ÀÚµéÀÌ ¾Õ¿¡¼ ¿Â°ÍÀÓ¿¡ Ʋ¸²¾ø´Ù¸é, ¹öÆÛÀÇ Ã³À½¿¡ ±×µéÀ» ÀúÀåÇ϶ó. */
if (filled > 0)
memcpy (inp, buffer, filled);
}
}
return 1;
}
18.9 ½¬ÇÁÆ® ½ÃÄö½ºµéÀ» »ç¿ëÇÑ ´ÙÁß¹ÙÀÌÆ® ÄÚµåµé.
¾î¶² ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ Äڵ忡¼, ¾î´À ƯÁ¤ÇÑ ¹ÙÀÌÆ® ½ÃÄö½ºÀÇ Àǹ̰¡ °íÁ¤µÇÁö ¾ÊÀº °ÍÀÌ ÀÖ´Ù; ±× Àǹ̴ µ¿ÀÏÇÑ ¹®ÀÚ¿ÀÇ Ã³À½¿¡ ÀÖ´Â ¾î¶² ½ÃÄö½º¿¡ ÀÇÁ¸ÇÑ´Ù. ÀüÇüÀûÀ¸·Î ±×°ÍÀº ´ÜÁö ¸î °³ÀÇ ½ÃÄö½º·Î¼ ´Ù¸¥ ½ÃÄö½ºµéÀÇ Àǹ̸¦ º¯È½Ãų¼ö ÀÖ´Ù; ±×µéÀ» ½¬ÇÁÆ® ½ÃÄö½º¶ó°í ºÎ¸£°í ¿ì¸®´Â ±× ´ÙÀ½¿¡ ³ªÅ¸³ª´Â ´Ù¸¥ ½ÃÄö½º¸¦ À§Çؼ ½¬ÇÁÆ® ½ÃÄö½º¸¦ ¼³Á¤ÇÑ´Ù°í ¸»ÇÑ´Ù.
½¬Æ®ÇÁ »óȲ°ú ½¬ÇÁÆ® ½ÃÄö½º¸¦ ¼³¸íÇϱâ À§Çؼ, ¿ì¸®´Â ½ÃÄö½º 0200ÀÌ 0240¿¡¼ 0377ÀÇ ¹üÀ§¸¦ °®´Â ¹ÙÀÌÆ®ÀÇ ½ÖÀ¸·Î ÇÑ ¹®ÀÚ¸¦ ³ªÅ¸³»´Â ÀϺ»¾î ¸ðµå¸¦ ½ÃÀÛÇÔÀ» ³ªÅ¸³»°í, ½ÃÄö½º 0201ÀÌ 0240¿¡ ¼ 0377ÀÇ ¹üÀ§¸¦ °®°í ISO Latin-1ÀÇ ¹®ÀÚ ÁýÇÕ¿¡ µû¶ó ÇØ¼®µÇ´Â Latin-1 ¸ðµå¸¦ ½ÃÀÛÇÔÀ» ³ªÅ¸³½ ´Ù°í °¡Á¤ÇÏÀÚ. À̰ÍÀº µÎ°³ÀÇ ¼±Åð¡´ÉÇÑ ½¬ÇÁÆ® »óȲÀ» °¡Áø ´ÙÁß¹ÙÀÌÆ® ÄÚµå("ÀϺ»¾î ¸ðµå"¿Í "Latin-1 ¸ðµå")¸¦ °¡Áö°í, µÎ °³ÀÇ ½¬ÇÁÆ® ½ÃÄö½º´Â ƯÁ¤ÇÑ ½¬ÇÁÆ® »óȲµéÀ» ¼³Á¤ÇÑ´Ù.
»ç¿ëÇϰí ÀÖ´Â ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ Äڵ尡 ½¬ÇÁÆ® »óȲµéÀ» »ç¿ëÇÒ ¶§, mblen, mbtowc ±×¸®°í wctomb´Â ¹®ÀÚ¿À» Á¶»çÇØ¼ ÇöÀçÀÇ ½¬ÇÁÆ® »óȲÀ» °»½ÅÇϰí À¯ÁöÇÑ´Ù. ÀÌ·¯ÇÑ ÀÛ¾÷À» Àû´çÇÏ°Ô ¸¸µé±â À§Çؼ, ´ç½ÅÀº ´ÙÀ½ÀÇ ±ÔÄ¢µéÀ» µû¶ó¾ß¸¸ ÇÑ´Ù.
둁 ¹®ÀÚ¿¿¡ ´ëÇÑ Á¶»ç¸¦ ½ÃÀÛÇϱâ Àü¿¡, ´ÙÁß¹ÙÀÌÆ® ¹®ÀÚ ÁÖ¼Ò¸¦ ³Î Æ÷ÀÎÅÍ·Î ÇØ¼ ±× ÇÔ¼ö¸¦ È£Ãâ Ç϶ó_¿¹¸¦µé¾î, mblen(NULL, 0). À̰ÍÀº Ç¥ÁØ ÃʱⰪÀ¸·Î ½¬ÇÁÆ® »óȲÀ» ÃʱâÈÇÑ´Ù.
둁 ÇÑ ¹ø¿¡ Çѹ®ÀÚ¾¿, ¼ø¼´ë·Î ¹®ÀÚ¿À» Á¶»çÇ϶ó. "µÚ·Î"°¡Áö ¸»°í ÀÌ¹Ì Á¶»çÇß´ø ¹®ÀÚµéÀ» ´Ù½Ã Á¶»çÇÏÁö ¸»°í, ´Ù¸¥ ¹®ÀÚ¿À» ó¸®ÇÏ´Â µ¿¾È ¹æÇØÇÏÁö ¸»¾Æ¶ó.
ÀÌµé ±ÔÄ¢µéÀ» µû¶ó mblenÀ» »ç¿ëÇÏ´Â ¿¹Á¦°¡ ÀÖ´Ù.
void
scan_string (char *s)
{
int length = strlen (s);
/* ½¬ÇÁÆ® »óȲÀ» ÃʱâÈÇ϶ó. */
mblen (NULL, 0);
while (1)
{
int thischar = mblen (s, length);
/* ¹®ÀÚ¿ÀÇ ³¡°ú À¯¿ëÇÏÁö ¾ÊÀº ¹®ÀÚµéÀ» ó¸®Ç϶ó */
if (thischar == 0)
break;
if (thischar == -1)
{
error ("invalid multibyte character");
break;
}
/* ÀÌ ¹®ÀÚ¸¦ ³Ñ¾î¼ ÁøÇàÇ϶ó */
s += thischar;
length -= thischar;
}
}
ÇÔ¼ö mblen, mbtowc ±×¸®°í wctombµéÀº »ç¿ëÇϰí ÀÖ´Â ´ÙÁß¹ÙÀÌÆ® Äڵ尡 ½¬ÇÁÆ® »óȲÀ» »ç¿ëÇÒ ¶§ ÀçÁøÀÔÇÏÁö ¾Ê´Â´Ù. ±×·¸Áö¸¸, ¾î´À ´Ù¸¥ ¶óÀ̺귯¸® ÇÔ¼öµµ À̵é ÇÔ¼öµéÀ» È£ÃâÇÏÁö ¾Ê±â ¶§¹® ¿¡, ´ç½ÅÀº ±× ½¬ÇÁÆ® »óȲÀÌ ´ç½ÅÀÌ ÀÌÇØÇÒ ¼ö ¾ø°Ô º¯ÇÒ°ÍÀ̶ó°í °ÆÁ¤ÇÒ Çʿ䰡 ¾ø´Ù.