´ÙÀ½ ÀÌÀü Â÷·Ê

4. Æ÷Æðú ÄÄÆÄÀϸµ

4.1 ÀÚµ¿ÀûÀ¸·Î Á¤ÀǵǴ ½Éº¼µé

¿©·¯ºÐÀº ¿©·¯ºÐÀÌ °®°í ÀÖ´Â ¹öÀüÀÇ gcc°¡ -v ¿É¼ÇÀ» ºÙÀÓÀ¸·Î½á ¾î¶°ÇÑ ½Éº¼À» ÀÚµ¿ÀûÀ¸·Î Á¤ÀÇÇÏ´ÂÁö ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î º»ÀÎÀÇ °ÍÀº ´ÙÀ½°ú °°´Ù.

$ echo 'main(){printf("hello world\n");}' | gcc -E -v -
Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
gcc version 2.7.2
 /usr/lib/gcc-lib/i486-box-linux/2.7.2/cpp -lang-c -v -undef
-D__GNUC__=2 -D__GNUC_MINOR__=7 -D__ELF__ -Dunix -Di386 -Dlinux
-D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__i386
-D__linux -Asystem(unix) -Asystem(posix) -Acpu(i386)
-Amachine(i386) -D__i486__ -

¸¸¾à ¿©·¯ºÐÀÇ Äڵ尡 ¸®´ª½º¿¡¸¸ °ü°èµÇ´Â ÄÚµå¶ó¸é, ´ÙÀ½°ú °°ÀÌ ÇØÁÖ´Â °ÍÀÌ ÁÁ´Ù.

#ifdef __linux__
/* ... funky stuff ... */
#endif /* linux */

__linux__¶ó´Â À̸§À» »ç¿ëÇ϶ó. linux°¡ ¾Æ´Ï´Ù. ÈÄÀÚ°¡ Á¤ÀǵǾî ÀÖ±â´Â ÇÏÁö¸¸ POSIX ±Ô°Ý¿¡´Â ¸ÂÁö ¾Ê±â ¶§¹®ÀÌ´Ù.

4.2 ÄÄÆÄÀÏ·¯ ºÎ¸£±â

ÄÄÆÄÀÏ·¯ ½ºÀ§Ä¡µé¿¡ ´ëÇÑ ¹®¼­´Â gcc info ÆäÀÌÁö¸¦ º¸¸é µÈ´Ù. (¿©·¯ºÐÀÌ Emacs¸¦ »ç¿ëÇÏ°í ÀÖ´Ù¸é C-h i±×¸®°í ³ª¼­ gcc ¿É¼ÇÀ» ¼±ÅÃÇ϶ó) ¿©·¯ºÐÀÌ °®°í ÀÖ´Â ¹èÆ÷ÆÇÀ» ¸¸µç »ç¶÷ÀÌ gcc info ÆäÀÌÁö¸¦ ³Ö¾îÁö ¾Ê¾ÒÀ» ¼öµµ ÀÖ°í, ¶Ç´Â ¿¾ ¹öÀüÀÇ °ÍÀÌ µé¾î°¡ ÀÖÀ» ¼öµµ ÀÖ´Ù. °¡Àå ÁÁÀº ¹æ¹ýÀº ftp://prep.ai.mit.edu/pub/gnu³ª ¶Ç´Â ¹Ì·¯ »çÀÌÆ®·Î °¡¼­ gcc ¼Ò½º Äڵ带 ¹Þ¾Æ¿À´Â °ÍÀÌ´Ù. ±×¸®°í ±× ¼Ò½º ¾È¿¡¼­ Ä«ÇÇÇؿ´Ù.

gcc ¿¡ ´ëÇÑ ¸ÇÆäÀÌÁö(gcc.1)´Â ÀϹÝÀûÀ¸·Î ½Ã´ë¿¡ µÚ¶³¾îÁ® ÀÖ´Ù°í ¸»ÇÒ ¼ö ÀÖ´Ù. ¸ÇÆäÀÌÁö¸¦ º¸·Á°í ÇÏ¸é ±×·¯ÇÑ °æ°í ¹®±¸¸¦ º¼ ¼ö ÀÖ´Ù.

ÄÄÆÄÀÏ·¯ Ç÷¡±×(flag)

gcc¸¦ »ç¿ëÇÒ ¶§, -On(¿©±â¼­ nÀº ÀÛÀº ¾çÀÇ Á¤¼öµé, »ý·«Çصµ µÈ´Ù)À» Ä¿¸Çµå ¶óÀÎ ¿É¼ÇÀ¸·Î ³Ö¾îÁÖ¸é Ãâ·Â Äڵ尡 ÃÖÀûÈ­µÈ´Ù. ¿©±â¼­ »ç¿ëµÇ´Â n °ª Áß¿¡¼­ ½ÇÁ¦ Àǹ̸¦ °®´Â °ªµéÀº gccÀÇ ¹öÀü¿¡ µû¶ó ´Ù¸¥µ¥, ÀϹÝÀûÀ¸·Î 0 (ÃÖÀûÈ­ÇÏÁö ¾ÊÀ½)ºÎÅÍ ½ÃÀÛÇؼ­ 2(»ó´çÈ÷ ¸¹ÀÌ ÃÖÀûÈ­), 3(¾ÆÁÖ¾ÆÁÖ ¸¹ÀÌ ÃÖÀûÈ­)±îÁö ¾²ÀδÙ.

³»ºÎÀûÀ¸·Î gcc´Â ÀÌ ¿É¼ÇÀ» -f¿Í -m À̶ó´Â ¿É¼Çµé·Î ¹Ù²Ù¾î¼­ ó¸®ÇÏ°Ô µÈ´Ù. -OÀÇ Æ¯Á¤ ·¹º§ÀÌ ¾î¶² Àǹ̸¦ °®´ÂÁö¿¡ ´ëÇؼ­´Â gcc ½ÇÇà½Ã¿¡ -v¿Í -Q(¹®¼­È­µÇÁö ¾Ê¾ÒÀ½)Ç÷¡±×¸¦ ºÙ¿©ÁÜÀ¸·Î½á È®ÀÎÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î -O2´Â ´ÙÀ½°ú °°ÀÌ ³ªÅ¸³­´Ù. (»ç¶÷µé¸¶´Ù ¼­·Î ´Ù¸¦ ¼ö ÀÖ´Ù)

enabled: -fdefer-pop -fcse-follow-jumps -fcse-skip-blocks
-fexpensive-optimizations
         -fthread-jumps -fpeephole -fforce-mem -ffunction-cse -finline
         -fcaller-saves -fpcc-struct-return -frerun-cse-after-loop
         -fcommon -fgnu-linker -m80387 -mhard-float -mno-soft-float
         -mno-386 -m486 -mieee-fp -mfp-ret-in-387

¿©·¯ºÐÀÇ ÄÄÆÄÀÏ·¯°¡ Áö¿øÇÏ°í ÀÖ´Â ÃÖÀûÈ­ ·¹º§º¸´Ù Å« ¼ýÀÚ¸¦ »ç¿ëÇÑ´Ù¸é (¿¹¸¦ µé¾î -O6), ±× ÄÄÆÄÀÏ·¯°¡ Áö¿øÇÏ´Â ÃÖÀûÀÇ ·¹º§·Î ÃÖÀûÈ­½ÃÄÑÁØ´Ù. ÀÌ·± ½ÄÀ¸·Î ÄÄÆÄÀϵǵµ·Ï ¼¼ÆõǾî ÀÖ´Â Äڵ带 ¹èÆ÷ÇÏ´Â °ÍÀº º°·Î ÁÁÀº »ý°¢Àº ¾Æ´Ñ °Í °°´Ù. ´õ ¸¹Àº ÃÖÀûÈ­ ·¹º§µéÀÌ Â÷ÈÄ gcc ¹öÀü¿¡ »ý±ä´Ù¸é, À߸øÇÏ¸é ¿©·¯ºÐÀÇ ¼Ò½º Äڵ尡 ¾û¶×ÇÏ°Ô ÄÄÆÄÀϵǴ ¼öµµ ÀÖ´Ù.

¸¸¾à ¿©·¯ºÐÀÌ Áö±Ý -O3ÀÌ ÃÖ°í ·¹º§À̶ó´Â °¡Á¤ÇÏ¿¡¼­ -O6¸¦ »ç¿ëÇß´Ù°í Ä¡ÀÚ. ÇÏÁö¸¸ ´ÙÀ½ ¹öÀü(¿¹¸¦ µé¾î¼­ 2.7.3.?)¿¡¼­ -O8±îÁö Áö¿øÇÏ°Ô µÈ´Ù¸é -O6´Â ÀüÇô ¾û¶×ÇÑ Àǹ̸¦ °¡Áú ¼öµµ ÀÖ´Ù.

gcc ¹öÀü 2.7.0 ºÎÅÍ 2.7.2 ±îÁöÀÇ »ç¿ëÀÚµéÀº -O2 ÃÖÀûÈ­ Ç÷¡±×¿¡ ¹ö±×°¡ ÀÖ´Ù´Â »ç½ÇÀ» Àß ¾Ë¾ÆµÎ±â ¹Ù¶õ´Ù. Strength ReductionÀ̶ó°í ÇÏ´Â °ÍÀÌ Á¦´ë·Î ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Â ÆÐÄ¡°¡ ÀÖ°í ´Ù½Ã gcc ¸¦ ÄÄÆÄÀÏÇØ¾ß ÇÒ°ÍÀÌ´Ù. ¶Ç´Â ¾ðÁ¦³ª -fno-strength-reduce ¶ó´Â ¿É¼ÇÀ» ÁÖ°í ÄÄÆÄÀÏÇϱ⠹ٶõ´Ù.

ÇÁ·Î¼¼¼­º° ¿É¼Ç

-O ¿É¼ÇÀ» Á־ ÀÚµ¿ÀûÀ¸·Î ÀÛµ¿ÇÏÁö ¾Ê´Â -m Ç÷¡±×µéÀÌ ÀÖ´Ù. ÇÏÁö¸¸ À̵éÀº »ó´çÈ÷ À¯¿ëÇÏ´Ù. Áß¿äÇÑ °ÍÀ¸·Î´Â -m386°ú -m486ÀÌ ÀÖ´Ù. ÀÌ Ç÷¡±×µéÀº gcc´õ·¯ °¢°¢ 386, 486Áß ¾î¶² °Í¿¡ ´õ ¸ÂÃç¼­ ÄÄÆÄÀÏÇÒ °ÍÀÎÁö¸¦ ¾Ë·ÁÁÖ´Â °ÍÀÌ´Ù. -m486À¸·Î ÄÄÆÄÀÏÇÏ¿´´Ù°í ÇÏ´õ¶óµµ 386 ¿¡¼­ ½ÇÇàµÇ´Âµ¥´Â ÁöÀå¾ø´Ù. ±×·¯´Ï °ÆÁ¤ÇÒ ÇÊ¿ä¾ø´Ù. 486 Äڵ尡 Á¶±Ý ´õ Å©Áö¸¸ 386 ¿¡¼­ ´À·ÁÁö°Å³ª ÇÏÁö´Â ¾Ê´Â´Ù.

¾ÆÁ÷±îÁö´Â -mpentiumÀ̳ª -m586°ú °°Àº °ÍÀº ¾ø´Ù. ¸®´©½º(Linus)´Â 486 ÄÚµå¿ÉƼ¸¶ÀÌÁîµÈ Äڵ带 ¾òÀ¸¸é¼­µµ ÆæƼ¾öÀÌ »ç¿ëÇÏÁö ¾Ê´Â Á¤·Ä¹æ½Ä°úÀÇ Ä¿´Ù¶õ Â÷ÀÌÁ¡ÀÌ ¾ø´Â Äڵ带 ¾ò±â À§Çؼ­´Â, -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2¸¦ »ç¿ëÇÒ °ÍÀ» Á¦¾ÈÇÏ°í ÀÖ´Ù. Michael Meissner(Cygnus¿¡ ÀÖ´Â)´Â ´ÙÀ½°ú °°ÀÌ ¸»ÇÏ°í ÀÖ´Ù.

³» À°°¨À¸·Î´Â -mno-strength-reduce¸¦ °°ÀÌ ¾²¸é ¶ÇÇÑ x86 ¿¡¼­ ´õ ºü¸¥ Äڵ带 ¾ò¾î³¾ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. (ÁÖÀÇ! ³ª´Â Áö±Ý strength reduction ¹ö±×¿¡ ´ëÇؼ­ ¸»ÇÏ°í ÀÖ´Â °ÍÀÌ ¾Æ´Ï´Ù. ±×°ÍÀº ÀüÇô ´Ù¸¥ ¹®Á¦ÀÌ´Ù) ¿Ö³ÄÇϸé x86Àº ´Ù¼Ò ·¹Áö½ºÅÍ ¼ýÀÚ°¡ Àû±â ¶§¹®ÀÌ´Ù. (±×¸®°í ´Ù¸¥ ·¹Áö½ºÅÍ¿¡ ´ëÇÏ¿© ·¹Áö½ºÅ͵éÀ» ±×·ìÀ¸·Î ¹­¾î¼­ spill ·¹Áö½ºÅÍ ¼ÓÀ¸·Î ó¸®ÇÏ´Â GCC ÀÇ Ã³¸®¹æ½ÄÀº ÀüÇô µµ¿òÀÌ µÇÁú ¾Ê´Â´Ù) StrengthReductionÀº ÀüÇüÀûÀ¸·Î °ö¼ÀÀ» µ¡¼ÀÀ¸·Î ±³Ã¼Çϱâ À§ÇÏ¿© ´Ù¸¥ ·¹Áö½ºÅ͵éÀ» »ç¿ëÇÏ°Ô µÈ´Ù. -fcaller-saves ¶ÇÇÑ ÀÌ·± ¹®Á¦Á¡ÀÌ ÀÖÁö ¾Ê³ª »ý°¢ÇÏ°í ÀÖ´Ù.

¶Ç ´Ù¸¥ ¿¹°¨Àº ÀÌ·¸´Ù. -fomit-frame-pointer´Â µµ¿òÀÌ µÉ ¼öµµ ÀÖ°í, ±×·¸Áö ¾ÊÀ» ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. ÇÑ ÆíÀ¸·Î´Â ¶Ç ´Ù¸¥ ·¹Áö½ºÅÍ°¡ ÇÒ´ç°¡´ÉÇÏ´Ù´Â °ÍÀ» ÀǹÌÇÒ ¼öµµ ÀÖ°í, ´Ù¸¥ ÇÑ ÆíÀ¸·Î´Â x86 ÀÌ ¿¬»êÁö½Ã(instruction)¿¡ ´ëÇÏ¿© ÀÎÄÚµùÇÏ´Â ¹æ½ÄÀ¸·Î¼­, ½ºÅà »ó´ëÀû ÁÖ¼Ò°¡ ÇÁ·¹ÀÓ »ó´ëÀû ÁÖ¼Òº¸´Ùµµ ´õ ¸¹Àº °ø°£À» Â÷ÁöÇÑ´Ù´Â °ÍÀ» ÀǹÌÇϱ⵵ ÇÑ´Ù. ÀÌ·¸°Ô µÇ¸é ÇÁ·Î±×·¥¿¡ »ç¿ëµÉ ¼ö ÀÖ´Â IcacheÀÌ ¾à°£ ÁÙ¾îµç´Ù. ¶ÇÇÑ -fomit-frame-pointer´Â ÄÄÆÄÀÏ·¯°¡ °è¼ÓÀûÀ¸·Î È£Ãâ ÈÄ¿¡µµ ½ºÅà Æ÷ÀÎÅ͸¦ Á¶Á¤ÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ¶æÇÑ´Ù. µû¶ó¼­ ÇÁ·¹ÀÓÀ» °®´Â °æ¿ì, ¸î ¹øÀÇ È£Ã⸸À¸·Îµµ ½ºÅÃÀÌ °¡µæ Â÷°Ô µÈ´Ù.

¸¶Áö¸· ¸»Àº ¸®´©½º ¶ÇÇÑ ¾ð±ÞÇÏ°í ÀÖ´Ù.

¸¸¾à ¿©·¯ºÐÀÌ ÃÖÀûÈ­µÈ È¿À²À» ¿øÇÑ´Ù¸é, ³ª¸¦ ¹ÏÁö ¸»¶ó. ½ÇÁ¦·Î Å×½ºÆ®¸¦ ÇغÁ¾ß ÇÑ´Ù. gcc ÄÄÆÄÀÏ·¯ÀÇ ¿É¼ÇÀº Á¤¸»·Î ¸¹´Ù. ±×¸®°í ¸î °³ÀÇ Æ¯Á¤ Á¶ÇÕÀÌ °¡Àå ÁÁÀº ÃÖÀûÈ­¸¦ ÀÌ·ïÁÙ °ÍÀÌ´Ù.

Internal compiler error: cc1 got fatal signal 11

½Ã±×³Î 11¹øÀº SIGSEGV, Áï ¼¼±×¸ÕÅ×ÀÌ¼Ç À§¹Ý¿¡ ´ëÇÑ ½Ã±×³ÎÀÌ´Ù. ÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¥ÀÌ Æ÷ÀÎÅ͸¦ À߸ø ½è´Ù´Â ¸»À̰ųª ÀڱⰡ ¼ÒÀ¯ÇÏ°í ÀÖÁö ¾ÊÀº ¸Þ¸ð¸®¿¡´Ù ¾²±â ÀÛ¾÷À» ÇÏ·Á°í ÇÒ ¶§ ¹ß»ýÇÑ´Ù. ±×·¡¼­ ÀÌ´Â gccÀÇ ¹ö±×ÀÏ ¼öµµ ÀÖ´Ù.

ÇÏÁö¸¸ gcc´Â ´ëºÎºÐÀÇ ÀÛ¾÷¿¡¼­ ¸Å¿ì ¾ÈÁ¤ÀûÀÌ°í Å×½ºÆÃÀ» ¸¹ÀÌ °ÅÄ£ ¼ÒÇÁÆ®¿þ¾î¶ó´Â »ç½ÇÀ» ±â¾ïÇ϶ó. gcc´Â ¶ÇÇÑ º¹ÀâÇÑ ÀÚ·á ±¸Á¶¿Í Æ÷ÀÎÅ͸¦ ¾öû³ª°Ô ¸¹ÀÌ »ç¿ëÇÏ°í ÀÖ´Ù. °£´ÜÈ÷ ¸»ÇÏÀÚ¸é ÇöÀç±îÁö ¼ÒÇÁÆ®¿þ¾î Áß¿¡¼­ °¡Àå ¶Ù¾î³­ ·¥ Å×½ºÆà ÇÁ·Î±×·¥(RAM Tester)À̶ó°í ¸»ÇÒ ¼öµµ ÀÖ´Ù. ¸¸¾à ¸Å¹ø ÄÄÆÄÀÏÇÒ ¶§¸¶´Ù ¸ØÃß´Â À§Ä¡°¡ ´Ù¸£´Ù¸é ÀÌ´Â °ÅÀÇ ´ëºÎºÐ ¿©·¯ºÐ Çϵå¿þ¾îÀÇ ¹®Á¦¶ó°í ºÁµµ µÈ´Ù. (CPU, ¸Þ¸ð¸®, ¸¶´õº¸µå³ª ij½¬) ¿©·¯ºÐÀÇ ÄÄÇ»ÅÍ°¡ ÆÄ¿ö ¿Â üŷÀ» °ÅÃļ­ Àß ºÎÆõǾú°í ±×¸®°í À©µµ¿ìÁî °°Àº °Íµµ Àß µ¹¾Æ°£´Ù°í Çؼ­ ±×°ÍÀ» gccÀÇ ¹ö±×·Î µ¹¸®Áö´Â ¸»¶ó. ÀÌ·¯ÇÑ »ç½ÇÀº ¹«ÀǹÌÇÏ´Ù. ±×¸®°í Ä¿³Î ÄÄÆÄÀÏÇϸ鼭 make zImage¿¡¼­ ²À ¸ØÃá´Ù°í Çؼ­ gccÀÇ ¹ö±×¶ó°í ¸»ÇÒ ¼ö´Â ¾ø´Ù. make zImage´Â ¹«·Á 200°³ ÀÌ»óÀÇ È­ÀÏÀ» ÄÄÆÄÀÏÇÏ°í ÀÖ´Ù. ±×°Íº¸´Ù´Â Á» ÀÛÀº °æ¿ì¸¦ ã¾Æº¸µµ·Ï ÇÏÀÚ.

¸¸¾à °è¼ÓÀûÀ¸·Î ¹ö±×°¡ ¶È°°ÀÌ ³ªÅ¸³ª°í Àڱ׸¶ÇÑ ÇÁ·Î±×·¥ ÄÄÆÄÀÏ¿¡¼­µµ ±×·¯ÇÏ´Ù¸é, FSF¿¡´Ù°¡ ¹ö±× ¸®Æ÷Æ®¸¦ Çصµ µÇ°í, ¶Ç´Â linux-gcc ¸ÞÀϸµ ¸®½ºÆ®¿¡ ±ÛÀ» ¿Ã·Áµµ µÈ´Ù. ±×·¯±â À§Çؼ­´Â ¿ì¼± gcc ¹®¼­¸¦ Àо°í ¾î¶² ÀýÂ÷°¡ ÇÊ¿äÇÑÁö ¼÷ÁöÇÑ ´ÙÀ½ Çϱ⠹ٶõ´Ù.

4.3 Æ÷ÆÃ(Portability)

¿äÁòÀº ¸¸¾à ±× ¼ÒÇÁÆ®¿þ¾î°¡ ¸®´ª½º·Î Æ÷ÆÃµÉ ¼ö ¾ø´Ù¸é ±× ¼ÒÇÁÆ®¿þ¾î´Â °¡Ä¡°¡ ¾ø´Â ÇÁ·Î±×·¥À̶ó°í ¸»ÇÑ´Ù. :-)

ÁøÁöÇÏ°Ô ¸»ÇÏÀÚ¸é, ÀϹÝÀûÀ¸·Î ¸®´ª½ºÀÇ 100% POSIX ȣȯ¼ºÀ» ÀÌ·ç±â À§Çؼ­´Â ¾ÆÁÖ ¾à°£ÀÇ ¼öÁ¤ÀÛ¾÷¸¸ÀÌ ÇÊ¿äÇÏ´Ù. ¶ÇÇÑ ´ÜÁö make ¶ó°í¸¸ ÇÏ¸é ½ÇÇàÈ­ÀÏÀÌ ¸¸µé¾îÁú ¼ö ÀÖµµ·Ï Çϱâ À§ÇÏ¿© ÄÚµåÀÇ ¿øÀúÀÚ¿¡°Ô ¼öÁ¤ Äڵ带 º¸³»´Â °ÍÀ̾߸»·Î °¡Ä¡ÀÖ´Â ÀÏÀÌ´Ù.

BSDisms (bsd_ioctl, daemon ±×¸®°í <sgtty.h>)

¿©·¯ºÐÀº ¿©·¯ºÐÀÇ ÇÁ·Î±×·¥À» -I/usr/include/bsd¸¦ ³Ö¾î¼­ ÄÄÆÄÀÏÇÑ ÈÄ, -lbsd ¿É¼ÇÀ» ³Ö°í ¸µÅ©ÇÒ ¼öµµ ÀÖ´Ù. (Áï Makefile ¾È¿¡¼­ -I/usr/include/bsd¸¦ CFLAGS º¯¼ö¿¡ ³Ö°í, -lbsd¸¦ LDFLAGS¿¡ ³ÖÀ½À¸·Î½á) ÀÌÁ¨ BSD ŸÀÔÀÇ ½Ã±×³Î ÇൿÀ» ¾ò¾î³»±â À§Çؼ­ -D__USE_BSD_SIGNAL¸¦ µ¡ºÙÀÏ ÇÊ¿ä°¡ ¾ø´Ù. ¿Ö³ÄÇϸé -I/usr/include/bsd¶ó°í ÇØÁÖ°í <signal.h>¸¦ ¼Ò½º ¾È¿¡¼­ Æ÷ÇÔÇÏ¸é ¸ðµç ÀÏÀÌ Á¦´ë·Î ÀÌ·ç¾îÁø´Ù.

¾ø¾îÁø ½Ã±×³Îµé(SIGBUS, SIGEMT, SIGIOT, SIGTRAP, SIGSYS µî)

¸®´ª½º´Â POSIX¸¦ ÁؼöÇÏ°í ÀÖ´Ù. ÀÌ·¯ÇÑ ½Ã±×³ÎµéÀº POSIX Á¤ÀÇ ½Ã±×³ÎµéÀÌ ¾Æ´Ï´Ù. ÀÌ´Â ISO/IEC 9945-1:1990 (IEEE Std 1003.1-1990), paragraph B.3.3.1.1 ¿¡¼­ ´ÙÀ½°ú °°ÀÌ ¸»ÇÏ°í ÀÖ´Â ¹ÙÀÌ´Ù.

SIGBUS, SIGEMT, SIGIOT, SIGTRAP, ±×¸®°í SIGSYS¿Í °°Àº ½Ã±×³ÎµéÀº POSIX.1À¸·ÎºÎÅÍ Á¦¿ÜµÇ¾ú´Ù. ¿Ö³ÄÇÏ¸é ±×µéÀÇ ÇൿÀº ÇÔÃàÀûÀÌ°í ¾î¶»°Ô ºÎ¸£´À³Ä¿¡ µû¶ó ´Ù¸£±â ¶§¹®¿¡ ÀûÀýÇÏ°Ô ¹üÁÖÈ­½Ãų ¼ö°¡ ¾ø´Ù. ÀÌ·¯ÇÑ ½Ã±×³ÎµéÀ» ¾ø¾Ö¹ö¸®´Â °ÍÀÌ ±Ô¾à ÁؼöÀÏ ¼öµµ ÀÖÁö¸¸, ¿Ö ±× ½Ã±×³ÎµéÀ» Á¦¿ÜÇعö·È´ÂÁö¿¡ ´ëÇؼ­ ¹®¼­È­ÇØ¾ß ÇÑ´Ù. ±×¸®°í ±× ½Ã±×³ÎµéÀ» ¾î¶»°Ô ó¸®ÇÒ °ÍÀΰ¡¿¡ ´ëÇؼ­´Â ¾Æ¹«·± °­Á¦ ±ÔÁ¤µµ ¾ø´Ù.

ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ÀÌ·¯ÇÑ ½Ã±×³ÎµéÀ» ¸ðµÎ SIGUNUSED·Î ÀçÁ¤ÀÇÇÏ´Â °ÍÀÌ´Ù. ¹Ù¸¥¹æ¹ýÀº ¹°·Ð ÀÌ·¯ÇÑ ½Ã±×³ÎÀ» ó¸®ÇÏ´Â ºÎºÐÀ» #ifdef ¹®ÀåÀ» ½á¼­ ó¸®Çϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù.

#ifdef SIGSYS
/* ... POSIX ±ÔÁ¤ÀÌ ¾Æ´Ñ SIGSYS Äڵ尡 ¿©±â¿¡ ¿Â´Ù .... */
#endif

K & R ÄÚµå

GCC´Â ANSI ÄÄÆÄÀÏ·¯ÀÌ´Ù. ÇÏÁö¸¸ ¾ÆÁÖ ¸¹Àº ÄÚµåµéÀÌ ANSI°¡ ¾Æ´Ï´Ù. ÀÌ·² ¶§´Â ÄÄÆÄÀÏ·¯ Ç÷¡±×¿¡ -traditional À̶ó°í¸¸ ºÙ¿©ÁÖ¸é µÈ´Ù°í ÇÒ ¼ö ÀÖ´Ù. ¹°·Ð ±«·Ó°Ô ¼öÀÛ¾÷À» ÇØÁà¾ß ÇÏ´Â ºÎºÐµµ ¸¹ÀÌ ÀÖ´Ù. gcc info ÆäÀÌÁö¸¦ »ìÆ캸±â ¹Ù¶õ´Ù.

-traditional¶ó´Â ¿É¼ÇÀº gcc °¡ ÀÌ¿ëÇÏ·Á°í ÇÏ´Â C ¾ð¾î ¹æ½ÄÀ» ¹Ù²Ù´Â °Í ¸»°íµµ ´Ù¸¥ È¿°ú¸¦ Áö´Ï°í ÀÖ´Ù. ¿¹¸¦ µé¾î ±× ¿É¼ÇÀº -fwritable-stringsÀ» ÀÛµ¿½ÃÅ°´Âµ¥, ¹®ÀÚ¿­ »ó¼ö¸¦ µ¥ÀÌŸ ¿µ¿ªÀ¸·Î º¸³»´Â ¿ªÇÒÀ» ÇÑ´Ù. (ÅؽºÆ® ¿µ¿ª, Áï ±×µéÀÌ ¾µ ¼ö ¾ø´Â ¿µ¿ªÀ» ¸»ÇÑ´Ù) ÀÌ·± °æ¿ì ÇÁ·Î±×·¥ÀÇ ¸Þ¸ð¸® »ç¿ëÈçÀû(footprint)ÀÌ Áõ°¡ÇÏ°Ô µÈ´Ù.

Àü󸮱⠽ɺ¼ÀÌ ÄÚµåÀÇ ÇÁ·ÎÅäŸÀÔ°ú Ãæµ¹ÇÒ ¶§

¸¹ÀÌ ¹ß»ýÇÏ´Â ¹®Á¦µé Áß¿¡ Çϳª°¡ ¹Ù·Î ¸î¸î ÇÔ¼öµéÀÌ ÀÌ¹Ì ¸®´ª½º Çì´õÈ­Àϵ鿡 ¸ÅÅ©·Î·Î Á¤ÀǵǾî ÀÖ°í Àü󸮱Ⱑ ÄÚµå ³»¿¡¼­ À¯»çÇÑ ÇÁ·ÎÅäŸÀÔ¿¡ ´ëÇÏ¿© ó¸® °ÅºÎ¸¦ ÇÏ´Â °æ¿ìÀÌ´Ù. º¸Åë atoi()¿Í atol()ÀÎ °æ¿ì°¡ ¸¹´Ù.

sprintf()

sprintf(string, fmt, ...)ÀÌ ¸¹Àº À¯´Ð½º ½Ã½ºÅÛ¿¡¼­´Â ¹®ÀÚ¿­¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¹ÝȯÇÏ´Â ¹Ý¸é¿¡ ANSI¸¦ µû¸£´Â ¸®´ª½º´Â ¹®ÀÚ¿­¿¡ »ðÀÔµÈ ¹®ÀÚÀÇ °¹¼ö¸¦ ¹ÝȯÇÑ´Ù. À̴ ƯÈ÷³ª SunOS¿Í °°Àº °ÍÀ¸·ÎºÎÅÍ Æ÷ÆÃÇÏ´Â °æ¿ì¿¡ ´õ¿í ÁÖÀÇÇØ¾ß ÇÑ´Ù.

FD_* °°Àº °Íµé? fcntl°ú ±× ºñ½ÁÇÑ ³à¼®µé. µµ´ëü Á¤ÀǺκÐÀÌ ¾îµð¿¡ Àִ°¡?

<sys/time.h>¿¡ ÀÖ´Ù. ¸¸¾à fcntlÀ» ÀÌ¿ëÇÏ°íÀÚ ÇÑ´Ù¸é ½ÇÁ¦ ÇÁ·ÎÅäŸÀÔÀ» À§ÇÏ¿© <unistd.h> ¶ÇÇÑ Æ÷ÇÔ½ÃÅ°°í ½ÍÀ» °ÍÀÌ´Ù.

ÀϹÝÀûÀ¸·Î ¸»ÇÏÀÚ¸é ¾î¶² ÇÔ¼ö¿¡ ´ëÇÑ ¸ÇÆäÀÌÁö¸¦ º¸¸é SYNOPSYS ºÎºÐ¿¡¼­ ¾î¶² Çì´õÈ­ÀÏÀ» #include ÇؾßÇÏ´ÂÁö ÀÚ¼¼È÷ ³ªÅ¸³»ÁÖ°í ÀÖÀ¸´Ï ±×°ÍÀ» Âü°íÇϱ⠹ٶõ´Ù.

select()¿¡¼­ ŸÀӾƿôÀÌ °É¸®°í ÇÁ·Î±×·¥ÀÌ °è¼Ó ±â´Ù¸®±â¸¸ ÇÑ´Ù.

¿¹Àü¿¡´Â select()¿¡ ´ëÇÑ Å¸ÀӾƿô ÆĶó¹ÌÅÍ°¡ ÀбâÀü¿ëÀ¸·Î¸¸ »ç¿ëµÇ¾ú´Ù. ±×¸®°í ±× ¶§¿¡µµ ¸ÇÆäÀÌÁö¿¡´Â ´ÙÀ½°ú °°Àº °æ°í°¡ ÀÖ¾ú´Ù.

select()´Â ¾Æ¸¶µµ ÀûÀýÇÑ °÷¿¡ ÀÖ´Â ½Ã°£°ªÀ» º¯°æÇÔÀ¸·Î½á ¸¸¾à¿¡ ±×·¯ÇÑ ÀÏÀÌ ¹ß»ýÇÑ´Ù¸é ¿ø·¡ÀÇ Å¸ÀӾƿôºÎÅÍ ³²Àº ½Ã°£À» ¹ÝȯÇØ¾ß ÇÒ °ÍÀÌ´Ù. ÇÏÁö¸¸ ÀÌ ±â´ÉÀº Â÷±â ¹öÀü¿¡¼­³ª ±¸ÇöµÉ °ÍÀÌ´Ù. µû¶ó¼­ ŸÀÓ ¾Æ¿ô Æ÷ÀÎÅÍ°¡ select() È£Ãâ¿¡ ÀÇÇÏ¿© ¼öÁ¤µÇÁö ¾ÊÀ» °ÍÀ̶ó°í »ý°¢ÇÏ´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¸øÇÏ´Ù.

¹Ù·Î ±× ³¯ÀÌ ¿Ô´Ù! ÃÖ¼ÒÇÑ ±×°ÍÀÌ ÀÌ·ç¾îÁö°í ÀÖ´Ù. select()È£Ãâ·ÎºÎÅÍ µ¹¾Æ¿Ã ¶§, ŸÀӾƿô Àμö´Â µ¥ÀÌÅÍ°¡ µµÂøÇÏÁö ¾Ê´Â´Ù¸é ±â´Ù¸®·Á°í Çß´ø ÀÜ·ù ½Ã°£À¸·Î ¼¼ÆõȴÙ. ¸¸¾à ¾Æ¹« µ¥ÀÌÅ͵µ µµÂøÇÏÁö ¾Ê¾Ò¾ú´Ù¸é ÀÌ °ªÀº 0(zero)ÀÌ µÇ¾úÀ» °ÍÀÌ´Ù. ±×¸®°í °°Àº ŸÀӾƿô ±¸Á¶Ã¼¸¦ °¡Áö°í È£ÃâÀ» ÇÏ°Ô µÇ¸é È£Ãâ Áï½Ã µÇµ¹¾Æ¿Ã °ÍÀÌ´Ù.

ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ­´Â ŸÀӾƿô °ªÀ» ¸Å¹ø select()¸¦ È£ÃâÇÒ ¶§¸¶´Ù °ü·Ã ±¸Á¶Ã¼¿¡ Àû¾îÁÖ¾î¾ß ÇÑ´Ù. ´ÙÀ½°ú °°Àº Äڵ尡 ÀÖ´Ù¸é,

      struct timeval timeout;
      timeout.tv_sec = 1; timeout.tv_usec = 0;
      while (some_condition)
            select(n,readfds,writefds,exceptfds,&timeout); 
¾Æ·¡¿Í °°ÀÌ ¹Ù²Ùµµ·Ï Ç϶ó.
      struct timeval timeout;
      while (some_condition) {
            timeout.tv_sec = 1; timeout.tv_usec = 0;
            select(n,readfds,writefds,exceptfds,&timeout);
      }

¸ðÀÚÀÍ(Mosaic)ÀÇ ¸î¸î ¹öÀüÀÌ ÇÑ ¶§ ÀÌ·¯ÇÑ ¹®Á¦·Î ¶°µé½âÇß¾ú´Ù. ȸÀüÇÏ´Â Áö±¸ ¾Ö´Ï¸ÅÀ̼ÇÀÇ ¼Óµµ°¡ ³×Æ®¿öÅ©¸¦ ÅëÇØ µé¾î¿À´Â ÀÚ·áÀÇ ¼Óµµ¿¡ ¹Ýºñ·¹ÇÏ´Â ÀÏÀÌ ¹ú¾îÁø °ÍÀÌ´Ù!

½Ã½ºÅÛ È£ÃâÀÌ ÀÎÅÍ·´Æ®µÉ ¶§

Áõ»ó:

ÇÁ·Î±×·¥ÀÌ Ctrl+Z·Î ¼­½ºÆæµåµÇ°í ´Ù½Ã ½ÃÀÛµÇ¾î ¹ö¸°´Ù. ¶Ç´Â ´Ù¸¥ ¶§¿¡´Â Ctrl+C¿Í °°Àº ½Ã±×³ÎÀ» ¹ß»ý½ÃÅ°°í ÀÚ½Ä ÇÁ·Î¼¼½ºµéÀ» Á×Àδ٠µîµî... "interrupted system calls" ¶Ç´Â "write: unknown error" ¶Ç´Â ±×·± °Í ºñ½ÁÇÑ ¿¡·¯¸¦ ³½´Ù.

¹®Á¦Á¡:

POSIX ½Ã½ºÅÛÀº ´Ù¸¥ ±¸½Ä À¯´Ð½º üÁ¦¿¡¼­º¸´Ù ¾à°£ ´õ ¸¹ÀÌ ½Ã±×³Î¿¡ ´ëÇؼ­ üŷÀ» ÇàÇÑ´Ù. ¸®´ª½º´Â ½Ã±×³Î Çڵ鷯µé(signal handler)À» ½ÇÇà½Ãų °ÍÀÌ´Ù.

´Ù¸¥ ¿î¿µÃ¼Á¦ÀÇ °æ¿ì¿¡´Â ´ÙÀ½°ú °°Àº ½Ã½ºÅÛ È£Ãâ¿¡ ´ëÇؼ­µµ üũÇÒ °ÍÀÌ´Ù. À§¿¡¼­ ¸»ÇÑ °Í ÀÌ¿Ü¿¡µµ ´ÙÀ½°ú °°Àº ½Ã½ºÅÛ È£Ãâµé: creat(), close(), getmsg(), putmsg(), msgrcv(), msgsnd(), recv(), send(), wait(), waitpid(), wait3(), tcdrain(), sigpause(), semop()

¸¸¾à ½Ã±×³Î(ÇÁ·Î±×·¥¿¡¼­ Çڵ鷯¸¦ ÀνºÅçÇÑ °æ¿ì)ÀÌ ½Ã½ºÅÛ È£Ãâ Áß¿¡ ¹ß»ýÇÑ´Ù¸é, ±×¿¡ ´ëÇÑ Çڵ鷯°¡ È£ÃâµÈ´Ù. ±×¸®°í Çڵ鷯°¡ ¹ÝȯµÇ¸é (½Ã½ºÅÛ È£Ãâ·Î), ½Ã½ºÅÛ È£ÃâÀº Áß°£¿¡ °¡·Îä±â¸¦ ´çÇß´ÂÁö »ìÆ캸°í Áï½Ã -1 °ªÀ» °¡Áö°í ¹ÝȯµÈ´Ù. ±×¸®°íerrno ¸¦ EINTR ·Î ¼¼ÆÃÇÑ´Ù. ÇÁ·Î±×·¥Àº ±×·¯ÇÑ ÀÏÀÌ ÀÖÀ» °ÍÀ̶ó°í ¿¹»óÇÏÁö ¸øÇÏ°í Á×´Â °ÍÀÌ´Ù.

¿©·¯ºÐÀº ´ÙÀ½ 2 °¡Áö ÇØ°áÃ¥ Áß¿¡ Çϳª¸¦ °í¸£¸é µÈ´Ù.

(1) ¿©·¯ºÐÀÌ ¼³Ä¡ÇÑ ¸ðµç ½Ã±×³Î Çڵ鷯¿¡ ´ëÇÏ¿© SA_RESTART¸¦ sigaction Ç÷¡±×¿¡ ÷°¡ÇÑ´Ù. ´ÙÀ½°ú °°Àº °ÍÀÌ ÀÖ´Ù¸é,

  signal (sig_nr, my_signal_handler);
¸¦ ´ÙÀ½°ú °°ÀÌ ¹Ù²Û´Ù.
  signal (sig_nr, my_signal_handler);
  { struct sigaction sa;
    sigaction (sig_nr, (struct sigaction *)0, &sa);
#ifdef SA_RESTART
    sa.sa_flags |= SA_RESTART;
#endif
#ifdef SA_INTERRUPT
    sa.sa_flags &= ~ SA_INTERRUPT;
#endif
    sigaction (sig_nr, &sa, (struct sigaction *)0);
  }

ÀÌ ¹æ¹ýÀÌ ´ëºÎºÐÀÇ ½Ã½ºÅÛ È£Ãâ¿¡ Àû¿ëµÇ±â´Â ÇÏÁö¸¸, read(), write(), ioctl(), select(), pause(), connect()¿¡ ´ëÇؼ­´Â ¿©·¯ºÐ ½º½º·Î EINTR¸¦ üũÇØÁÖ¾î¾ß ÇÑ´Ù. ´ÙÀ½À» »ìÆ캸ÀÚ.

(2) ¿©·¯ºÐÀÌ Á÷Á¢ ¸í½ÃÀûÀ¸·Î EINTRÀ» üũÇØÁØ´Ù.

read()¸¦ »ç¿ëÇÏ´Â Äڵ尡 ¿ø·¡ ÀÌ·¸°Ô µÇ¾î ÀÖ´Ù°í Ä¡ÀÚ.

int result;
while (len > 0) { 
  result = read(fd,buffer,len);
  if (result < 0) break;
  buffer += result; len -= result;
}
ÀÌ Äڵ带 ´ÙÀ½°ú °°ÀÌ ¹Ù²Ù¾îÁÖ¸é µÈ´Ù.

int result;
while (len > 0) { 
  result = read(fd,buffer,len);
  if (result < 0) { if (errno != EINTR) break; }
  else { buffer += result; len -= result; }
}
À̹ø¿¡ ÀÌ·± Äڵ尡 ÀÖ´Ù¸é,

int result;
result = ioctl(fd,cmd,addr);
±×°ÍÀº ¶ÇÇÑ ´ÙÀ½°ú °°ÀÌ ¹Ù²î¾î¾ß ÇÑ´Ù.
int result;
do { result = ioctl(fd,cmd,addr); }
while ((result == -1) && (errno == EINTR));

BSD À¯´Ð½ºÀÇ ¸î¸î ¹öÀü¿¡¼­´Â ½Ã½ºÅÛ È£ÃâÀ» Àç°³ÇÏ´Â °ÍÀÌ ±âº» ÇൿÀ¸·Î µÇ¾î ÀÖ´Â °æ¿ìµµ ÀÖÀ¸¹Ç·Î ÁÖÀÇÇÏÀÚ. ½Ã½ºÅÛ È£ÃâÀÌ °¡·Îä±â¸¦ Çã¿ëÇϱâ À§Çؼ­´Â SV_INTERRUPT ¶Ç´Â SA_INTERRUPT Ç÷¡±×¸¦ »ç¿ëÇϵµ·Ï ÇÏÀÚ.

¾²±â °¡´É ¹®ÀÚ¿­ (ÇÁ·Î±×·¥ÀÌ ·£´ýÇÏ°Ô ¼¼±×ÆúÆ®¸¦ ³½´Ù)

GCC´Â gcc¸¦ »ç¿ëÇÏ´Â »ç¶÷µéÀÌ ¹®ÀÚ¿­ »ó¼ö¿¡ ´ëÇÏ¿© Á¤È®È÷ »ó¼ö·Î¼­ °è¼Ó »ç¿ëÇÒ °ÍÀ̶ó°í ³«°üÇÏ°í ÀÖ´Â µí ÇÏ´Ù. µû¶ó¼­ ±× ¹®ÀÚ¿­ »ó¼ö¸¦ ÇÁ·Î±×·¥ÀÇ ÅؽºÆ® ¿µ¿ª¿¡ Áý¾î³Ö´Â´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ½º¿Ò ¿µ¿ªÀ» »ç¿ëÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÇÁ·Î±×·¥ÀÇ µð½ºÅ© À̹ÌÁö·ÎºÎÅÍ ÆäÀÌÁö ÀÎ & ¾Æ¿ôÀ» ÇàÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. ±×·¯¹Ç·Î ¹®ÀÚ¿­ »ó¼ö¿¡ ´ëÇÏ¿© ´Ù½Ã ¾²±â ÀÛ¾÷À» ÇÏ°Ô µÇ¸é ¼¼±×¸àÅ×ÀÌ¼Ç ÆúÆ®¸¦ ÀÏÀ¸Å°°Ô µÇ´Â °ÍÀÌ´Ù.

¿¹¸¦ µé¾î¼­ ¹®ÀÚ¿­ »ó¼ö¸¦ Àμö·Î ÇÏ¿© mktemp()¸¦ È£ÃâÇÏ´Â ¿¾³¯ ÇÁ·Î±×·¥µé¿¡¼­´Â ¹®Á¦°¡ ¹ß»ýÇÒ °ÍÀÌ´Ù. mktemp()´Â ÁÖ¾îÁø Àμö¿¡ ´Ù½Ã ¾²·Á°í Çϱ⠶§¹®ÀÌ´Ù.

ÀÌ ¹®Á¦¸¦ °íÄ¡±â À§Çؼ­´Â (a) -fwritable-strings À̶ó´Â ¿É¼ÇÀ» Á־ ÄÄÆÄÀÏÇÑ´Ù. ÀÌ·¸°Ô ÇØÁÖ¸é gcc´Â ¹®ÀÚ¿­ »ó¼ö¸¦ µ¥ÀÌŸ ¿µ¿ª¿¡ ³Ö°Ô µÈ´Ù. ¶Ç´Â (b) ¹®Á¦°¡ µÇ´Â ºÎºÐÀ» ¼öÁ¤Çؼ­ »ó¼ö°¡ ¾Æ´Ï¶ó º¯¼ö·Î ÁÖ¾îÁö°Ô ¸¸µé°í È£Ãâ Àü¿¡ strcpy ¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅ͸¦ ±×°÷À¸·Î Ä«ÇÇÇØÁØ´Ù.

¿Ö execl()È£ÃâÀÌ ½ÇÆÐÇϴ°¡?

¿øÀÎÀº °£´ÜÇÏ´Ù. Á¦´ë·Î È£ÃâÀ» ÇÏÁö ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù. execl¿¡ ´ëÇÑ Ã¹¹ø° Àμö´Â ½ÇÇàÇÏ°íÀÚ ÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. ±×¸®°í µÎ¹ø°ºÎÅʹ ȣÃâÇÏ´Â ÇÁ·Î±×·¥¿¡ Àü´ÞÇÒ argv¹è¿­ÀÌ´Ù. ±â¾ïÇ϶ó! argv[0]´Â ÀüÅëÀûÀ¸·Î ¾Æ¹«·± Àμö ¾øÀÌ ½ÇÇàµÇ´õ¶óµµ ¼¼ÆÃÀÌ µÈ´Ù´Â »ç½ÇÀ»! µû¶ó¼­ ´ÙÀ½°ú °°ÀÌ Äڵ带 ½á¾ßÇÑ´Ù.

execl("/bin/ls","ls",NULL);
Àý´ë·Î ´ÙÀ½°ú °°ÀÌ ¾²¸é ¾ÈµÈ´Ù.
execl("/bin/ls", NULL);

¾Æ¹«·± Àü´ÞÀμö ¾øÀÌ ½ÇÇà½ÃÅ°´Â °æ¿ì¿¡µµ ½ÇÇàÇü½ÄÀº ÀÚ½ÅÀÇ µ¿Àû ¶óÀ̺귯¸® ÀÇÁ¸¼ºÀ» ³ªÅ¸³¾ ¼ö ÀÖ´Â ¹æ½ÄÀ¸·Î ±¸¹®À» ¸ÂÃçÁØ ÇüŶó¾ß ÇÑ´Ù. ÃÖ¼ÒÇѵµ a.outÀÇ °æ¿ì´Â ±×·¯ÇÏ´Ù. ELF´Â Á» ´Ù¸¥ ¹æ½ÄÀ¸·Î ÀÛµ¿ÇÑ´Ù.

(¸¸¾à ÀÌ·¯ÇÑ ¶óÀ̺귯¸® Á¤º¸¸¦ ¿øÇÑ´Ù¸é ¾ÆÁÖ °£´ÜÇÑ ÀÎÅÍÆäÀ̽º°¡ ÀÖ´Ù. µ¿Àû ·ÎµùDynamic Loading¿¡ ´ëÇÑ ¼½¼ÇÀ» º¸°Å³ª ldd¿¡ ´ëÇÑ ¸ÇÆäÀÌÁö¸¦ Âü°íÇ϶ó)


´ÙÀ½ ÀÌÀü Â÷·Ê