Next: , Up: Program Behavior   [Contents]


4.1 ´è¾æ¤Ê¥×¥í¥°¥é¥à¤ÎºîÀ®

ưŪ¤ËÁ´¤Æ¤Î¥Ç¡¼¥¿¹½Â¤¤ò³ÎÊݤ¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢¥Õ¥¡¥¤¥ë̾¡¢¹Ô¡¢¥Õ¥¡¥¤¥ë¡¢ ¥·¥ó¥Ü¥ë¤ò´Þ¤à¡¢¤¤¤«¤Ê¤ë¥Ç¡¼¥¿¹½Â¤¤ÎŤµ¤ä¿ô¤Ë¤Ä¤¤¤Æ¤â¡¢¾¡¼ê¤Ê À©¸Â¤òÈò¤±¤Ê¤µ¤¤¡£ ¤Û¤È¤ó¤É¤ÎUnix¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤Ç¤Ï¡¢“Ť¤¹Ô¤ÏÌۤäÆÀÚ¤êµÍ¤á¤ë”¡£ ¤³¤ì¤ÏGNU¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤Ç¤ÏµöÍÆ¤Ç¤­¤Ê¤¤¡£

¥Õ¥¡¥¤¥ë¤òÆÉ¤à¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤ÏNULʸ»ú¤ä¡¢0177°Ê¾å¤Î¥³¡¼¥É¤ò»ý¤Ä ʸ»ú¤ò´Þ¤à¤¢¤é¤æ¤ë¾¤Î°õ»ú¤Ç¤­¤Ê¤¤Ê¸»ú¤â¡¢Íî¤È¤¹¤Ù¤­¤Ç¤Ï¤Ê¤¤¡£ Í£°ì°ÕÌ£¤Î¤¢¤ëÎã³°¤Ï¡¢¤½¤¦¤¤¤Ã¤¿Ê¸»ú¤ò°·¤¨¤Ê¤¤¡¢¤¢¤ë¼ï¤Î¥×¥ê¥ó¥¿¤Ø¤Î¥¤ ¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÆÃÊ̤˰տޤ·¤¿¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤À¤í¤¦¡£ ²Äǽ¤Ê¸Â¤ê¤¤¤Ä¤Ç¤â¡¢UTF-8¤ä¤½¤Î¾¤Î¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò»È¤Ã¤Æ¡¢ ¿¥Ð¥¤¥Èʸ»ú¤òɽ¤¹¥Ð¥¤¥ÈÎó¤òŬÀڤ˰·¤¨¤ë¤è¤¦¤Ë¤·¤Ê¤µ¤¤¡£

¥¨¥é¡¼¤ò̵»ë¤·¤¿¤¤¤È»×¤Ã¤Æ¤¤¤ë¤Î¤Ç¤Ê¤±¤ì¤Ð¡¢¤¢¤é¤æ¤ë¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î¥¨ ¥é¡¼¤ò³Îǧ¤·¤Ê¤µ¤¤¡£¼ºÇÔ¤·¤¿¥·¥¹¥Æ¥à¥³¡¼¥ë¤«¤éȯÀ¸¤¹¤ë¤¢¤é¤æ¤ë ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ë¡¢¤â¤·¤¢¤ì¤Ð¥Õ¥¡¥¤¥ë¤Î̾Á°¤È¤½¤Î¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤Î̾Á° ¤À¤±¤Ç¤Ê¤¯¡¢(perror¤äƱÅù¤Î¤â¤Î¤«¤éÆÀ¤é¤ì¤ë)¥·¥¹¥Æ¥à¥¨¥é¡¼Ê¸»ú Îó¤ò´Þ¤á¤Ê¤µ¤¤¡£Ã±¤Ê¤ë“cannot open foo.c”¤ä“stat failed”¤Ï½½Ê¬¤Ç¤Ê ¤¤¡£

malloc¤ärealloc¤Î¤¹¤Ù¤Æ¤Î¸Æ¤Ó½Ð¤·¤ò¡¢¥¼¥í¤òÊÖ¤·¤¿¤«¤É¤¦ ¤«³Îǧ¤·¤Ê¤µ¤¤¡£Î㤨¤½¤Î¥Ö¥í¥Ã¥¯¤ò¤â¤Ã¤È¾®¤µ¤¯¤·¤è¤¦¤È¤·¤Æ¤¤¤Æ¤â¡¢ realloc¤Î³Îǧ¤ò¤·¤Ê¤µ¤¤¡£2¤Î³¬¾è¤Ë¥Ö¥í¥Ã¥¯¥µ¥¤¥º¤ò´Ý¤á¤ë¥·¥¹¥Æ¥à ¤Ç¤Ï¡¢realloc¤Ï¤â¤Ã¤È¾®¤µ¤¤Îΰè¤òÍ׵᤹¤ë¾ì¹ç¤Ë°Û¤Ê¤ë¥Ö¥í¥Ã¥¯¤ò ÆÀ¤ë¤³¤È¤¬¤¢¤ë¡£

Unix¤Ç¤Ï¡¢realloc¤¬¥¼¥í¤òÊÖ¤¹¾ì¹ç¡¢µ­²±Îΰè¤òÇ˲õ¤·¤Æ¤·¤Þ¤¦¡£ GNU realloc¤Ï¤³¤Î¥Ð¥°¤ò»ý¤¿¤Ê¤¤¡£¼ºÇÔ¤¹¤ë¤È¡¢¸µ¤Î¥Ö¥í¥Ã¥¯¤ÏÊѹ¹ ¤µ¤ì¤Ê¤¤¡£¤½¤Î¥Ð¥°¤Ïľ¤Ã¤Æ¤¤¤ë¤È¤ß¤Ê¤·¤Æ¤â¹½¤ï¤Ê¤¤¡£¤â¤·¤¢¤Ê¤¿¤Î¥×¥í¥° ¥é¥à¤òUnix¾å¤ÇÁö¤é¤»¤¿¤¯¤Æ¡¢¤³¤¦¤¤¤¦Â»¼º¤òÈò¤±¤¿¤¤¤Ê¤é¡¢GNU malloc ¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤ë¡£

free¤Ï²òÊü¤µ¤ì¤¿¥Ö¥í¥Ã¥¯¤ÎÃæ¿È¤òÊѤ¨¤Æ¤·¤Þ¤¦¤È¹Í¤¨¤Ê¤±¤ì¤Ð¤Ê¤é ¤Ê¤¤¡£¤½¤Î¥Ö¥í¥Ã¥¯¤ÎÃͤò¼è¤ê½Ð¤·¤¿¤«¤Ã¤¿¤é¡¢É¬¤ºfree¤ò¸Æ¤ÖÁ°¤Ë ¼è¤ê½Ð¤µ¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£

¤â¤·malloc¤¬ÂÐÏÃŪ¤Ç¤Ê¤¤¥×¥í¥°¥é¥à¤Ç¼ºÇÔ¤·¤¿¤é¡¢¤½¤ì¤òÃ×̿Ū¤Ê ¥¨¥é¡¼¤Ë¤·¤Ê¤µ¤¤¡£ÂÐÏÃŪ¤Ê¥×¥í¥°¥é¥à(¥æ¡¼¥¶¤«¤é¥³¥Þ¥ó¥É¤ò¸Æ¤ó¤Ç¤¯¤ë¤â ¤Î)¤Ç¤Ï¡¢¤½¤Î¥³¥Þ¥ó¥É¤òÃæ»ß¤·¤Æ¡¢¥³¥Þ¥ó¥ÉÆÉ¤ß¹þ¤ß¥ë¡¼¥×¤«¤éÊÖ¤ë¤Î¤¬¤è ¤êÎɤ¤¡£¤³¤¦¤¹¤ë¤È¡¢¤½¤Î¥æ¡¼¥¶¤Ï²¾ÁÛ¥á¥â¥ê¤ò²òÊü¤¹¤ë¤¿¤á¤Ë¾¤Î¥×¥í¥»¥¹ ¤ò»¦¤·¤Æ¡¢ºÆ¤Ó¤½¤Î¥³¥Þ¥ó¥É¤ò»î¤¹¤³¤È¤¬¤Ç¤­¤ë¡£

¤â¤·°ú¿ô¤Îʸˡ¤¬¾å¼ê¤¯¹Ô¤«¤Ê¤¯¤Ê¤ë¤ï¤±¤Ç¤Ê¤¤¤Ê¤é¡¢°ú¿ô¤Î²òÆÉ¤Ë getopt_long¤ò»È¤¤¤Ê¤µ¤¤¡£

ÀÅŪ¤Êµ­²±Îΰ褬¥×¥í¥°¥é¥à¤Î¼Â¹ÔÃæ¤Ë½ñ¤­¹þ¤Þ¤ì¤ë¤¿¤á¤Ç¤¢¤ë¤È¤­¡¢¤½¤ì¤ò ½é´ü²½¤¹¤ë¤¿¤á¤Î¡¢ÌÀ¼¨Åª¤ÊC¤Î¥³¡¼¥É¤ò»È¤¤¤Ê¤µ¤¤¡£Êѹ¹¤µ¤ì¤Ê¤¤¥Ç¡¼¥¿¤Ë ÂФ¹¤ë¡¢C¤Î½é´ü²½ÉÕ¤­Àë¸À¤ò»Ä¤·¤Æ¤ª¤­¤Ê¤µ¤¤¡£

(¥Õ¥¡¥¤¥ë¥Ç¥£¥ì¥¯¥È¥ê¤ä¡¢utmp¡¢¥«¡¼¥Í¥ë¥á¥â¥ê¤ÎÇÛÃ֤Τ褦¤Ê)Unix¤Î¥Ç¡¼ ¥¿¹½Â¤¤ò¸«¤¨¤Ë¤¯¤¯¤¹¤ë¡¢Äã¿å½à¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÈò¤±¤ë¤è¤¦Åؤá¤Ê¤µ¤¤¡£ ¤³¤ì¤é¤Ï¸ß´¹À­¤ò¼º¤¤¤¬¤Á¤À¤«¤é¤À¡£¤â¤·¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ÎÁ´¥Õ¥¡¥¤¥ë¤ò¸« ÉÕ¤±¤ëɬÍפ¬¤¢¤ë¤Ê¤é¡¢readdir¤ä¾¤Î¹â¿å½à¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò»È ¤¤¤Ê¤µ¤¤¡£¤³¤ì¤é¤ÏGNU¤Ë¤è¤Ã¤Æ¸ß´¹À­¤ò»ý¤Ã¤Æ¥µ¥Ý¡¼¥È¤µ¤ì¤ë¤À¤í¤¦¡£

¹¥¤Þ¤·¤¤¥·¥°¥Ê¥ë¥Ï¥ó¥É¥ê¥ó¥°¤Îµ¡Ç½¤ÏBSDή¤Îsignal¤È POSIX sigaction´Ø¿ô¤Ç¤¢¤ë¡£Ê̤ˤ¢¤ëUSG¤Îsignal¤Ï Îô¤Ã¤¿À߷פÀ¡£

º£Æü¤Ç¤Ï¡¢POSIX¥·¥°¥Ê¥ë´Ø¿ô¤Î»ÈÍѤ¬¥×¥í¥°¥é¥à¤ò°Ü¿¢¤·¤ä¤¹¤¯¤¹¤ë °ìÈÖ´Êñ¤ÊÊýË¡¤«¤â¤·¤ì¤Ê¤¤¡£signal¤ò»È¤¦¤È¡¢GNU libc version 1 ¤ò»È¤¦GNU/Linux¥·¥¹¥Æ¥à¾å¤ÇBSD¤Î¿¶¤ëÉñ¤¤¤òÆÀ¤ë¤¿¤á¤Ë¡¢signal.h ¤Ç¤Ï¤Ê¤¯bsd/signal.h¤òinclude¤¹¤Ù¤­¤À¡£signal¤¬USG¤Î¿¶¤ë Éñ¤¤¤·¤«»ý¤¿¤Ê¤¤¥·¥¹¥Æ¥à¤ò¥µ¥Ý¡¼¥È¤¹¤ë¤«¡¢¤¢¤ë¤¤¤Ï¡¢¤½¤ì¤é¤òÄü¤á¤Æ¤·¤Þ ¤¦¤«¤Ï¤¢¤Ê¤¿¼¡Âè¤À¡£

“¤¢¤êÆÀ¤Ê¤¤”¾õÂÖ¤ò¸¡½Ð¤¹¤ë¥¨¥é¡¼¥Á¥§¥Ã¥¯¤Ç¤Ï¡¢Ã±¤ËÃæ»ß¤·¤Ê¤µ¤¤¡£¥á¥Ã ¥»¡¼¥¸¤ò½ÐÎϤ¹¤ë°ÕÌ£¤ÏÉáÄ̤ʤ¤¡£¤³¤ì¤é¤Î¥Á¥§¥Ã¥¯¤Ï¥Ð¥°¤Î¸ºß¤ò¼¨¤·¤Æ¤¤¤ë¡£ ¤½¤Î¥Ð¥°¤òľ¤·¤¿¤¤¿Í¤Ê¤éï¤Ç¤â¡¢¤½¤Î¥½¡¼¥¹¥³¡¼¥É¤òÆÉ¤ß¡¢¥Ç¥Ð¥Ã¥¬¤òÁö¤é ¤»¤Ê¤¤¤È¤¤¤±¤Ê¤¤¤À¤í¤¦¡£¤À¤«¤é¡¢¤½¤Î¥½¡¼¥¹¤Ë¥³¥á¥ó¥È¤Ç¤½¤ÎÌäÂê¤òÀâÌÀ¤· ¤Ê¤µ¤¤¡£´Ø·¸¤Î¤¢¤ë¥Ç¡¼¥¿¤ÏÊÑ¿ô¤ÎÃæ¤Ç¡¢¤½¤ì¤Ï¥Ç¥Ð¥Ã¥¬¤Ç¸¡ºº¤¹¤ë¤Î¤ÏÍÆ°× ¤À¤í¤¦¡£¤À¤«¤é¡¢¤½¤ì¤é¤ò¤É¤³¤«Â¾¤Î°ÌÃ֤˰ܤ¹°ÕÌ£¤Ï¤Ê¤¤¡£

¥×¥í¥°¥é¥à¤Î½ªÎ»¾õÂ֤Ȥ·¤Æ¡¢¥¨¥é¡¼¤Î¥«¥¦¥ó¥È¤ò»È¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£ ¤³¤ì¤Ï¾å¼ê¤¯¹Ô¤«¤Ê¤¤¡£¤Ê¤¼¤Ê¤é¡¢½ªÎ»¾õÂÖ¤ÎÃͤÏ(0¤«¤é255¤Þ¤Ç¤Î) 8¥Ó¥Ã¥È¤ËÀ©¸Â¤µ¤ì¤Æ¤¤¤ë¤«¤é¤À¡£¤½¤Î¥×¥í¥°¥é¥à¤¬°ì²óÁö¤ë´Ö¤Ë256¤Î¥¨¥é¡¼ ¤¬µ¯¤­¤ë¤«¤â¤·¤ì¤Ê¤¤¡£¤â¤·½ªÎ»¾õÂ֤Ȥ·¤Æ256¤òÊÖ¤½¤¦¤È¤¹¤ë¤È¡¢¿Æ¥×¥í¥» ¥¹¤Ï¤½¤Î¾õÂ֤Ȥ·¤Æ0¤ò¸«¤ë¤³¤È¤Ë¤Ê¤ê¡¢¤½¤Î¥×¥í¥°¥é¥à¤¬À®¸ù¤·¤¿¤«¤Î¤è¤¦ ¤Ë¸«¤¨¤ë¤À¤í¤¦¡£

¤â¤·°ì»þ¥Õ¥¡¥¤¥ë¤òºî¤ë¤Ê¤é¡¢TMPDIR´Ä¶­ÊÑ¿ô¤ò³Îǧ¤·¤Ê¤µ¤¤¡£¤³¤Î ÊÑ¿ô¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ì¤Ð¡¢/tmp¤Ç¤Ï¤Ê¤¯¡¢»ØÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤ò »È¤¤¤Ê¤µ¤¤¡£