Á¦ 8Àå Àú ¼öÁØ ÀÔ/Ãâ·Â
ÀÌ ÀåÀº ÆÄÀÏ ±â¼úÀÚ »ó¿¡¼ Àú ¼öÁØÀÇ ÀÔ/Ãâ·Â ¸í·ÉÀ» ÇàÇÏ´Â ÇÔ¼öµé¿¡ ´ëÇØ¼ ¼³¸íÇϰí ÀÖ´Ù. ÀÌ ÇÔ¼öµéÀº ½ºÆ®¸²°ú´Â ´Ù¸¥ °ÍµéÀ» À§ÇÑ Àú ¼öÁØÀÇ Á¦¾î ¸í·ÉµéÀ» ¼öÇàÇϱâ À§ÇÑ ÇÔ¼ö·Î½á, 7Àå [I/O on Streams], 63ÆäÀÌÁö ¾È¿¡ ¼³¸íµÈ °í ¼öÁØÀÇ ÀÔ/Ãâ·Â ÇÔ¼öµé¿¡ ±âº»ÀûÀ¸·Î Æ÷ÇԵǾî ÀÖ´Ù.
½ºÆ®¸²-¼öÁØ ÀÔ/Ãâ·ÂÀº ´õ À¯¿¬Çϰí, º¸Åë ´õ Æí¸®ÇÏ´Ù; ±×·¡¼, ÇÁ·Î±×·¡¸ÓµéÀº ÀϹÝÀûÀ¸·Î ÇÊ¿äÇÒ ¶§¸¸ ±â¼úÀÚ-¼öÁØ ÇÔ¼öµéÀ» »ç¿ëÇÑ´Ù. À̰Ϳ¡´Â ¸î °¡Áö ÀÌÀ¯°¡ ÀÖ´Ù.
o Å« µ¢¾î¸®¿¡¼ ¹ÙÀ̳ʸ® ÆÄÀϵéÀ» Àбâ À§ÇØ
o ÆÄ½ÌÇϱâ Àü¿¡ ÄÚ¾î ¾È¿¡¼ ÀüüÀÇ ÆÄÀÏÀ» Àбâ À§ÇØ
o ¿ÀÁ÷ ±â¼úÀÚ¸¦ °¡Áö°í ¼öÇàµÇ¾îÁö´Â, µ¥ÀÌÅÍ ÂüÁ¶¿Í´Â ´Ù¸¥ ¸í·ÉÀ» ¼öÇàÇϱâ À§ÇØ ( ´ç½ÅÀº ½ºÆ® ¸²°ú ÀÏÄ¡ÇÏ´Â ±â¼úÀÚ¸¦ ¾ò±â À§ÇØ ÆÄÀϹøÈ£¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.)
o ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ ±â¼úÀÚ¸¦ ³Ñ°ÜÁÖ±â À§ÇØ. ( ÀÚ½ÄÀº »ó¼Ó¹ÞÀº ±â¼úÀÚ¸¦ »ç¿ëÇϱâ À§ÇØ ÀÚ½ÅÀÇ ½º Æ®¸²À» ¸¸µé ¼ö ÀÖ´Ù, ÇÏÁö¸¸ Á÷Á¢ÀûÀ¸·Î ½ºÆ®¸²À» »ó¼Ó¹ÞÀ» ¼ö´Â ¾ø´Ù. )
8.1 ÆÄÀÏ ¿°í ´Ý±â
ÀÌ ÀýÀº ÆÄÀÏ ±â¼úÀÚ¸¦ »ç¿ëÇÏ¿© ÆÄÀϵéÀ» ¿°í ´Ý´Â ¿ø½ÃÀûÀÎ °ÍµéÀ» ¼³¸íÇϰí ÀÖ´Ù. open °ú creat ÇÔ¼öµéÀº Çì´õÆÄÀÏ 'fnctl.h'¿¡ ¼±¾ðµÇ¾î ÀÖ°í, close´Â 'unistd.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö : int open (const char *filename, int flags[, mode_t mode])
open ÇÔ¼ö´Â filenameÀ¸·Î À̸§Áö¾îÁø ÆÄÀÏÀ» À§ÇÑ »õ·Î¿î ÆÄÀÏ ±â¼úÀÚ¸¦ ¸¸µé°í ¸®ÅÏÇÑ´Ù. óÀ½¿¡, ÆÄÀÏÀ» À§ÇÑ ÆÄÀÏ À§Ä¡ Áö½ÃÀÚ´Â ÆÄÀÏÀÇ ½ÃÀÛÁ¡ÀÌ´Ù. mode Àμö´Â ¿ÀÁ÷ ÆÄÀÏÀ» ¸¸µé ¶§ »ç¿ëµÇ¾î ÁöÁö¸¸, ¾î¶² °æ¿ì¿¡µµ Àμö·Î °ø±ÞÇϱâ À§ÇÑ Å»ÀÌ ¾ø´Ù. flags Àμö´Â ÆÄÀÏÀ» ¾î¶² ¹æ½ÄÀ¸·Î °³¹æÇÒ °ÍÀÎÁö¸¦ Á¦¾îÇÑ´Ù. À̰ÍÀº ºñÆ® ¸¶½ºÅ©(bit mask) ÀÌ´Ù; ´ç½ÅÀº Àû´çÇÑ Àμö¸¦ ÁÖ¾î OR¿¬»êÀ» »ç ¿ë ÇØ¼ °ªÀ» ¸¸µç´Ù.( C¿¡¼´Â '|' ¿¬»êÀÚ¸¦ »ç¿ëÇØ¼ )
ÆÄÀÏ °Ë»ö ¸ðµå¸¦ Á¤Çϱâ À§Çؼ flagsÀμö´Â ÀÌµé °ªÁß¿¡¼ Çϳª¸¦ ¹Ýµå½Ã Æ÷ÇÔ½ÃÄѾ߸¸ ÇÑ´Ù.
O_RDONLY Àбâ Àü¿ëÀ¸·Î ÆÄÀÏÀ» °³¹æ
O_WRONLY ¾²±â Àü¿ëÀ¸·Î ÆÄÀÏÀ» °³¹æ
O_RDWR Àбâ¿Í ¾²±â°¡ µÑ´Ù °¡´ÉÇÑ °³¹æ
flagsÀμö´Â ¾Æ·¡ °ªµé°ú Á¶ÇÕÀ» ÅëÇØ¼ Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù.
O_APPEND À̰ÍÀÌ ¼³Á¤µÇ¸é, ¸ðµç ¾²±â ¸í·ÉµéÀº Áö±Ý ÇöÀçÀÇ ÆÄÀÏ À§Ä¡¿¡ °³ÀÇÄ¡ ¾Ê°í, ÆÄÀÏÀÇ ³¡¿¡ µ¥ÀÌÅ͸¦ ¾´´Ù.
O_CREAT ¸¸¾à ¼³Á¤µÇ¸é, ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÏÁö ¾ÊÀ¸¸é »õ·Ó°Ô ¸¸µé¾îÁú °ÍÀÌ´Ù.
O_EXCL ¸¸ÀÏ O_CREAT ¿Í O_EXCL ÀÌ ¼³Á¤µÇ¸é, ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÒ ¶§ open¸í·ÉÀº ½ÇÆÐÇÑ´Ù.
O_NOCTTY ¸¸ÀÏ filenameÀÌ Å͹̳¯ µð¹ÙÀ̽º À̸§À̸é, ÇÁ·Î¼¼½º¸¦ À§ÇÏ¿© Á¦¾îÇÏ´Â ÅÍ¹Ì ³¯ÀÌ ¸¸µé¾îÁöÁö ¾Ê´Â´Ù. 24Àå [Job Control], 335ÆäÀÌÁö¸¦ ÂüÁ¶ÇÏ¿©, Á¦¾îÇÏ´Â Å͹̳¯ÀÌ µÇ´Â °ÍÀÌ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö¿¡ ´ëÇÑ Á¤º¸¸¦ ÂüÁ¶Ç϶ó.
O_NONBLOCK À̰ÍÀº ºñ ºí·ÏÈ ¸ðµå·Î ¼³Á¤ÇÑ´Ù. ÀÌ ¿É¼ÇÀº º¸Åë FIFO¿Í( 10Àå [Pipes and FIFOs} ÆäÀÌÁö145 ÂüÁ¶) °°Àº Ưº°ÇÑ ÆÄÀϵé°ú Å͹̳¯°ú °°Àº µð¹ÙÀ̽º¿¡ »ç¿ëµÈ´Ù. º¸Åë, ÀÌ µé ÆÄÀϵéÀ» À§ÇÏ¿© ÆÄÀÏÀÌ "Áغñ"»óÅÂÀÏ µ¿¾È ºí·ÏÀ» °³¹æÇÑ´Ù. ¸¸ÀÏ O_NONBLOCKÀÌ ¼³Á¤µÇ¸é, openÀº Áï½Ã ¸®ÅÏÇÑ´Ù. O_NONBLOCK ºñÆ®´Â ¶ÇÇÑ Àбâ¿Í ¾²±â¿¡ ¿µÇâÀ» ¹ÌÄ£´Ù: ¸¸¾à ±×°÷¿¡ ÀÐ ±â¿¡ À¯¿ëÇÑ ÀÔ·ÂÀÌ ¾ø°Å³ª, Ãâ·ÂÀÌ ¾²¿©Áú ¼ö ¾ø´Ù¸é, ±×·¯ÇÑ ½ÇÆÐÀÇ »óȲÀ» Áï°¢ÀûÀ¸·Î ±×µé¿¡°Ô ¸®ÅÏ ÇÏ´Â °ÍÀ» Çã¿ëÇÑ´Ù.
O_TRUNC ¸¸ÀÏ ÆÄÀÏÀÌ Á¸ÀçÇÏ°í ¾²±â ¸ðµå·Î °³¹æÀÌ µÇ¾î ÀÖ´Ù¸é, 0ÀÇ ±æÀÌ·Î ±×°ÍÀ» ÀÚ¸¥´Ù. ÀÌ ¿É¼ÇÀº µð·ºÅ丮³ª, FIFOµé°ú °°Àº Ưº°ÇÑ ÆÄÀϵéÀÌ ¾Æ´Ï¶ó ÀϹÝÀûÀÎ ÆÄÀϵ鿡°Ô À¯¿ë ÇÏ´Ù.
ÀÌ ½Éº¼ »ó¼öµé¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸´Â 8.10Àý [File Status Flags] ÆäÀÌÁö 116À» ÂüÁ¶Ç϶ó.
openÀ¸·Î ºÎÅÍ º¸Åë ¸®ÅÏ µÇ´Â °ªÀº À½ÀÌ ¾Æ´Ñ Á¤¼ö ÆÄÀÏ ±â¼úÀÚÀÌ´Ù. ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì¿¡´Â ´ë½Å ¿¡ -1ÀÇ °ªÀ» ¸®ÅÏ ÇÑ´Ù. º¸ÅëÀÇ ÆÄÀÏÀ̸§ ¹®¹ý¿¡·¯¿¡ ´õÇÏ¿©(6.2.3Àý [File Name Errors] 60ÆäÀÌÁö ÂüÁ¶), ´ÙÀ½Àº ÀÌ ÇÔ¼ö¿¡¼ Á¤ÀÇÇϰí ÀÖ´Â errno¿Í ¿¡·¯»óȲÀÌ´Ù.
EACCES ÆÄÀÏÀº Á¸ÀçÇÏÁö¸¸, flags Àμö¿¡ ÀÇÇÑ ¿äûÀ¸·Î Àбâ/¾²±â°¡ ºÒ°¡´ÉÇÏ´Ù.
EEXIST O_CREAT ¿Í O_EXCLÀÌ ¸ðµÎ ¼³Á¤µÇ°í, ±× ÆÄÀÏÀº ÀÌ¹Ì Á¸ÀçÇÑ´Ù.
EINTR open¸í·ÉÀº ½Ã±×³¯(signal)¿¡ ÀÇÇØ ÀÎÅÍ·´Æ® µÇ¾îÁ³´Ù. 21.5Àý [Interrupted Primitives], 293 ÆäÀÌÁö ÂüÁ¶
EISDIR flags Àμö´Â ¾²±â ¸ðµå·Î ÁöÁ¤µÇ¾î ÀÖ°í, ÆÄÀÏÀº µð·ºÅ丮 ÀÌ´Ù.
EMFILE ÇÁ·Î¼¼½º°¡ ³Ê¹« ¸¹Àº ÆÄÀÏÀ» °³¹æÇß´Ù.
ENFILE ÀüÁ¦ÀÇ ½Ã½ºÅÛÀ̳ª, ¾Æ¸¶µµ µð·ºÅ丮¸¦ Æ÷ÇÔÇÑ ÆÄÀÏ ½Ã½ºÅÛÀÌ ¾î¶² ¼ø°£¿¡ ´õ ÀÌ»ó ÆÄ ÀÏÀÇ °³¹æÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù. ( ÀÌ ¹®Á¦´Â GNU ½Ã½ºÅÛ¿¡¼´Â ¹ß»ýÇÏÁö ¾Ê´Â´Ù.)
ENOENT °°Àº À̸§ÀÇ ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾Ê´Âµ¥, O_CREAT Ç÷¡±×µµ ¼±¾ðµÇÁö ¾Ê¾Ò´Ù.
ENOSPC »õ·Î¿î ÆÄÀÏÀ» ³Ö¾î¾ß ÇÏ´Â µð·ºÅ丮³ª ÆÄÀÏ ½Ã½ºÅÛÀÌ È®ÀåµÇ¾îÁú ¼ö ¾ø´Ù. ¿Ö³ÄÇÏ¸é ±×°÷¿¡´Â ³²¾ÆÀÖ´Â °ø°£ÀÌ ¾ø±â ¶§¹®ÀÌ´Ù.
ENXIO O_NONBLOCK ¿Í O_WRONLY°¡ µÑ´Ù ¼³Á¤µÇ°í filenameÀ̸§À» °¡Áø ÆÄÀÏÀÌ FIFOÀÌ °í, ¾î¶² ÇÁ·Î¼¼½ºµµ Àбâ À§Çؼ ÆÄÀÏÀ» °³¹æÇÏÁö ¾Ê¾ÒÀ» ¶§.
EROFS ÆÄÀÏÀÌ ¿ÀÁ÷ Àб⠸ðµåÀÎ ÆÄÀÏ ½Ã½ºÅÛ»ó¿¡ Á¸ÀçÇϰí flags Àμö·Î O_WRONLY, O_RDWR, O_CREAT, O_TRUNC ÀÇ ¾î¶² °ÍÀÌ¶óµµ ¼³Á¤µÇ¸é.
ÀÌ open ÇÔ¼ö´Â ½ºÆ®¸²À» ¸¸µå´Â fopen°ú freopenÇÔ¼öµéÀ» À§ÇØ ¿ø½ÃÀûÀÎ ±âÃʰ¡ µÇ¾îÁø´Ù.
½Ã´ë¿¡ µÚ¶³¾îÁø ÇÔ¼ö :
int creat (const char *filename, mode_t mode)
ÀÌ ÇÔ¼ö´Â ½Ã´ë¿¡ µÚ¶³¾îÁ® ÀÖ´Ù. creat(filename, mode) ÀÌ·¸°Ô È£ÃâÇÏ´Â °ÍÀº open (filename, O_WRONLY | O_CREAT | O_TRUNC, mode) ÀÌ·¸°Ô È£ÃâÇÏ´Â °Í°ú µ¿µîÇÏ´Ù.
ÇÔ¼ö : int close (int filedes)
closeÇÔ¼ö´Â ÆÄÀÏ ±â¼úÀÚ filedes¸¦ Æó¼âÇÑ´Ù. ÆÄÀÏ ´Ý±â´Â ´ÙÀ½ÀÇ °á°ú¸¦ °®´Â´Ù.
o ÆÄÀÏ ±â¼úÀÚ°¡ ÇØÁ¦µÇ¾îÁø´Ù.
o ÆÄÀÏ¿¡¼ ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ¼ÒÀ¯µÈ ¾î´À Àá±ä(lock) ·¹ÄÚµå´Â Àá±ÝÇØÁ¦ µÈ´Ù.
o pipe³ª FIFO¿Í ¿¬°üµÈ ¸ðµç ÆÄÀÏ ±â¼úÀÚ°¡ ´ÝÇôÁú ¶§, unread µ¥ÀÌÅÍ´Â ¹ö·ÁÁø´Ù.
close·ÎºÎÅÍ ¸®ÅÏ µÇ´Â ÀϹÝÀûÀÎ °ªÀº 0ÀÌ´Ù; ½ÇÆÐÀÇ °æ¿ì¿¡ -1ÀÌ ¸®ÅÏ µÈ´Ù. ´ÙÀ½ÀÇ errno´Â ÀÌ ÇÔ ¼ö¿¡¼ Á¤ÀǵǾîÁø ¿¡·¯»óȲÀÌ´Ù.
EBADF filedesÀμö°¡ À¯¿ëÇÑ ÆÄÀÏ ±â¼úÀÚ°¡ ¾Æ´Ï´Ù.
EINTR closeÈ£ÃâÀÌ ½Ã±×³¯¿¡ ÀÇÇØ ÀÎÅÍ·´Æ® µÇ¾ú´Ù. 21.5Àý [Interrupted Primitives] 293ÆäÀÌÁö ¸¦ ÂüÁ¶. À̰ÍÀº EINTRÀ» ¾î¶»°Ô Ãë±ÞÇÏ´ÂÁö¿¡ ´ëÇÑ Àû´çÇÑ ¿¹ÀÌ´Ù;
TEMP_FAILURE_RETRY (close (desc));
½ºÆ®¸²À» ´Ý±â À§Çؼ´Â, close·Î ÆÄÀÏ ±â¼úÀÚ¸¦ ´ÝÀ¸·Á ½ÃµµÇÏ´Â ´ë½Å¿¡ fclose( 7.4Àý [Closing Stream] 65ÆäÀÌÁö ÂüÁ¶)¸¦ È£ÃâÇ϶ó. À̰ÍÀº ¹öÆÛµÈ Ãâ·ÂÀ» Ç÷¯½¬Çϰí, ´ÝÇûÀ½À» ÁöÀûÇϱâ À§ÇØ ½º Æ®¸² ¿ÀºêÁ§Æ®¸¦ °»½ÅÇÑ´Ù.
8.2 ±âº» ÀԷ°ú Ãâ·Â
ÀÌ ÀýÀº ÆÄÀÏ ±â¼úÀÚ»óÀÇ ±âº» ÀԷ°ú Ãâ·Â ¸í·ÉÀ» ¼öÇàÇϱâÀ§ÇÑ ÇÔ¼öµéÀ» ¼³¸íÇϰí ÀÖ´Ù: read, write, ±×¸®°í lseek. À̵é ÇÔ¼öµéÀº Çì´õÆÄÀÏ 'unistd.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
µ¥ÀÌÅÍ Å¸ÀÔ : ssize__t
ÀÌ µ¥ÀÌÅÍ Å¸ÀÔÀº ´ÜÀÏÇÑ ¸í·ÉÀ¸·Î ÀÐÇôÁö°Å³ª ¾²¿©Áú ¼ö ÀÖ´Â ºí·ÏÀÇ Å©±â¸¦ ³ªÅ¸³»±â À§ÇØ »ç ¿ëµÇ¾îÁø´Ù. À̰ÍÀº size_t ¿Í À¯»çÇÏÁö¸¸ ¹Ýµå½Ã ºÎÈ£ÈµÈ Å¸ÀÔÀ̾î¾ß ÇÑ´Ù.
ÇÔ¼ö : ssize_t read (int filedes, void *buffer, size_t size)
readÇÔ¼ö´Â ±â¼úÀÚ filedesÀÇ ÆÄÀϷκÎÅÍ size ¹ÙÀÌÆ®¸¦ Àаí, ±× °á°ú¸¦ ¹öÆÛ¿¡ ÀúÀåÇÑ´Ù.( À̰ÍÀº ¹®ÀÚ ½ºÆ®¸µÀÌ ÇÊ¿äÇÏÁö ¾Ê°í ±×°÷¿¡´Â ºÎ°¡µÈ ³Î Á¾·á¹®ÀÚ°¡ ¾ø´Ù.) ¸®ÅϰªÀº ½ÇÁ¦·Î ÀÐÀº ¹ÙÀÌÆ® ÀÇ ¼öÀÌ´Ù. À̰ÍÀº sizeº¸´Ù ÀûÀ»¼öµµ ÀÖ´Ù; ¿¹¸¦ µé¾î, ¸¸ÀÏ ÆÄÀÏ¿¡ ³²°ÜÁø ¹ÙÀÌÆ®ÀÇ ¼ö°¡ Àû°Å³ª Áï½Ã À¯¿ëÇÑ ¹ÙÀÌÆ®ÀÇ ¼ö°¡ ÀûÀº °æ¿ìµîÀÌ ÀÖ´Ù. Á¤È®ÇÑ µ¿ÀÛÀº ÆÄÀÏÀÇ Á¾·ù°¡ ¹«¾ùÀÎÁö¿¡ µû¶ó ÀÇ Á¸ÇÑ´Ù. size ¹ÙÀÌÆ®º¸´Ù ´ú Àд °ÍÀº ¿¡·¯°¡ ¾Æ´ÔÀ» ±â¾ïÇ϶ó.
0ÀÇ °ªÀº ÆÄÀÏÀÇ ³¡À» ÁöÀûÇÑ´Ù.( ¸¸ÀÏ size ÀμöÀÇ °ªÀÌ 0ÀÎ °æ¿ì¸¦ Á¦¿ÜÇϰí..) À̰ÍÀº ¿¡·¯·Î °£ ÁÖÇÏÁö ¾Ê´Â´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ÆÄÀÏÀÇ ³¡ÀÎ »óÅ¿¡¼ read¸¦ È£ÃâÇϸé, ±×°ÍÀº 0À» ¸®ÅÏÇÏ´Â °Í ¿Ü¿¡ ¾Æ¹«Àϵµ ÇÏÁö ¾Ê´Â´Ù. ¸¸ÀÏ read°¡ Àû¾îµµ Çѹ®ÀÚ¸¦ ¸®ÅÏÇÑ´Ù¸é, ´ç½ÅÀÌ ÆÄÀÏÀÇ ³¡¿¡ µµ´ÞÇß´ÂÁö¸¦ ¾Ë ¼ö ÀÖ´Â ¾Æ¹«·± ¹æ¹ýÀÌ ¾ø´Ù. ±×·¯³ª ¸¸ÀÏ ´ç½ÅÀÌ ³¡¿¡ µµ´ÞÇØ ÀÖ¾ú´Ù¸é ´ÙÀ½ readÀÇ È£ÃâÀº 0 À» ¸®ÅÏÇØ¼ ÆÄÀÏÀÇ ³¡ÀÓÀ» ÁöÀûÇØÁÙ °ÍÀÌ´Ù. ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì¿¡, read´Â -1À» ¸®ÅÏÇÑ´Ù. ´ÙÀ½ ÀÇ errno´Â ÀÌ ÇÔ¼ö¿¡¼ Á¤ÀÇµÈ ¿¡·¯ÀÇ »óȲÀÌ´Ù.
EAGAIN
ÀϹÝÀûÀ¸·Î, Áï½Ã À¯¿ëÇÑ ÀÔ·ÂÀÌ ¾øÀ» ¶§, read´Â ÀÔ·ÂÀ» ±â´Ù¸°´Ù. ±×·¯³ª ¸¸ÀÏ ±× ÆÄÀÏ¿¡¼ O_NONBLOCK°¡ ¼³Á¤µÇ¸é( 8.10Àý [File Status Flags], 116ÆäÀÌÁö ÂüÁ¶), read´Â ¾Æ¹«·± µ¥ÀÌÅ͵µ ±â´Ù¸®Áö ¾Ê°í Áï½Ã ¸®ÅÏÇϰí, ÀÌ ¿¡·¯¸¦ º¸°íÇÑ´Ù.
ȣȯ¼º ³ëÆ® : BSD UnixÀÇ ´ëºÎºÐÀÇ ¹öÀüÀº À̰ÍÀ» À§ÇÑ ´Ù¸¥ ¿¡·¯Äڵ带 »ç¿ëÇÑ´Ù: EWOULDBLOCK.. GNU ¶óÀ̺귯¸®¿¡¼´Â, EWOULDBLOCKÀº EAGAINÀÇ ´Ù¸¥À̸§ÀÌ´Ù. ±×·¡¼ ´ç½ÅÀÌ ¾î ¶² À̸§À» »ç¿ëÇØµµ ¹®Á¦°¡ ¹ß»ýµÇÁö ¾Ê´Â´Ù. ¾î¶² ½Ã½ºÅÛµéÀº, Ưº°ÇÑ ¹®ÀÚ ÆÄÀϷκÎÅÍ µ¥ÀÌÅÍÀÇ Å« µ¢¾î¸®¸¦ ÀÐÀ¸·Á ÇÒ ¶§, ¸¸ÀÏ Ä¿³Î(kernal)ÀÌ ´ç½ÅÀÇ °ÍÀ» ´ãÀ»¼ö ÀÖ´Â( to lock down the user's pages ), ÃæºÐÇÑ ¹°¸®Àû ¸Þ¸ð¸®¸¦ ¾òÀ»¼ö ¾ø´Â °æ¿ì¿¡ EAGAINÀÇ ¿¡·¯¸¦ ³»°í ½ÇÆÐÇßÀ½À» Áö ÀûÇÑ´Ù. µð¹ÙÀ̽º°¡ »ç¿ëÀÚÀÇ ¸Þ¸ð¸® ¿µ¿ªÀ» Á÷Á¢ÀûÀ¸·Î ¾ï¼¼½ºÇÏ´Â °ÍÀÌ Á¦ÇѵǾî ÀÖ´Â °ÍÀº±×µé Àº Ä¿³Î³»ºÎÀÇ ºÐ¸®µÈ ¹öÆÛ¸¦ »ç¿ëÇϱ⠶§¹®ÀÌ´Ù. ±×°Í¿¡ Å͹̳¯µéÀº Æ÷ÇÔµÇÁö ¾Ê´Â´Ù,
EBADF
filedes Àμö¿¡ ÁÖ¾îÁø °ÍÀÌ À¯¿ëÇÑ ÆÄÀÏ ±â¼úÀÚ°¡ ¾Æ´Ï´Ù.
EINTR
read°¡ ÀÔ·ÂÀ» ±â´Ù¸®°í ÀÖ´Â µ¿¾È ½Ã±×³¯¿¡ ÀÇÇØ ÀÎÅÍ·´Æ® µÇ¾îÁ³´Ù. 21.5Àý [Interruped Primitives], 293ÆäÀÌÁö¸¦ ÂüÁ¶.
EIO
¸¹Àº µð¹ÙÀ̽ºµé, ±×¸®°í µð½ºÅ© ÆÄÀϵéÀ» À§ÇÏ¿©, ÀÌ ¿¡·¯´Â Çϵå¿þ¾î ¿¡·¯¸¦ ÁöÀûÇÑ´Ù. EIO´Â ¶Ç ÇÑ Á¦¾î ÁßÀÎ Å͹̳¯·ÎºÎÅÍ ¹è°æ ÇÁ·Î¼¼½º°¡ Àб⸦ ½ÃµµÇϰí, SIGTTINÀÇ ½ÅÈ£°¡ ¾Æ¹«·± µ¿ÀÛµµ ÇÏÁö ¾Ê°í º¸³»Áü¿¡ ÀÇÇØ ¸ØÃá ÇÁ·Î¼¼½ºÀÇ ÀϹÝÀû µ¿ÀÛ¿¡ ´ëÇØ ¹ß»ýÇÑ´Ù. À̰ÍÀº ¸¸¾à ½ÅÈ£°¡ ºí·Ï µÇ¾îÁö°Å³ª ¹«½ÃµÇ°Å³ª, ÇÁ·Î¼¼½º ±×·ìÀÌ ºÎ¸ð ÇÁ·Î¼¼½º¸¦ ÀÒ¾î¹ö·È´Ù¸é ¹ß»ýµÇ¾îÁú °ÍÀÌ´Ù. 24Àå [Job Control], 335ÆäÀÌÁö¸¦ ÂüÁ¶Çؼ job control¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸¸¦ ¾ò°í, 21Àå [Signal Handling] 271ÆäÀÌÁö¸¦ ÂüÁ¶Çؼ, ½ÅÈ£¿¡ ´ëÇÑ Á¤º¸¸¦ ÂüÁ¶Ç϶ó.
---- ¿ªÀÚÁÖ : blocked--> ºí·ÏµÈ À̶ó°í À̰÷¿¡¼ ÇØ¼®ÇÏ¿´´Ù. Á»´õ ÀÚ¼¼È÷ ¼³¸íÇÏÀÚ¸é ºí·ÏÀ̶õ º¸Åë ÇϳªÀÇ ÀÔ/Ãâ·Â ´ÜÀ§·Î Ç¥ÇöµÇ´Â °ÍÀÌ ÀϹÝÀûÀÌÁö¸¸ À̰÷¿¡¼ ¾²ÀÎ °ÍÀÇ Àǹ̴ ¾Æ¸¶µµ(?) À¯ ´Ð½º ó·³ ´ÙÁß ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛ¿¡¼ ÇϳªÀÇ ÇÁ·Î¼¼¼°¡ ÀÚ¿øÀ» ȹµæÇÏÁö ¸øÇÏ¿© ¾Æ¹«·± ÀÛ¾÷µµ ¼öÇàÇÒ ¼ö ¾ø´Â »óÅ¿¡ óÇÑ °Í. ÀÌ·¯ÇÑ »óŸ¦ ºí·ÏµÈ »óŶó°í ÇÏ´Â °Í °°´Ù.( Å©... ÀÚ½ÅÇÒ ¼ö ¾ø¾î¼ Á˼Û.. ÇÏÁö¸¸ °ÅÀÇ ¸ÂÀ»µí~)
read ÇÔ¼ö´Â fgetcó·³ ½ºÆ®¸²À¸·ÎºÎÅÍ Àд µ¿ÀÛÀ» ÇÏ´Â ¸ðµç ÇÔ¼öµé¿¡ ±âº»ÀûÀ¸·Î Æ÷ÇԵǾî ÀÖ´Ù.
ÇÔ¼ö : ssize_t write (int filedes, const void *buffer, size_t size)
writeÇÔ¼ö´Â ±â¼úÀÚ filedes ÆÄÀÏ¿¡ ¹öÆÛ¿¡ ÀÖ´Â size ¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ ¾²´Â ÇÔ¼öÀÌ´Ù. ¹öÆÛ¿¡ ÀÖ ´Â µ¥ÀÌÅÍ´Â ¹®ÀÚ ½ºÆ®¸µ°ú ³Î ¹®ÀÚ°¡ ÇÊ¿äÇÏÁö ¾Ê´Ù. ¸®ÅϰªÀº ½ÇÁ¦·Î ¾º¿©Áø ¹ÙÀÌÆ®µéÀÇ °³¼öÀÌ ´Ù. À̰ÍÀº º¸ÅëÀº size¿Í °°Áö¸¸, ´õ ÀûÀ»¼öµµ ÀÖ´Ù( ¿¹¸¦ µé¾î, ¸¸ÀÏ ¹°¸®Àû ¸Åü°¡ ä¿öÁ® ÀÖ´Â °æ¿ì ). ¿¡·¯°¡ ¹ß»ýÇϸé write´Â -1À» ¸®ÅÏÇÑ´Ù. ´ÙÀ½ÀÇ errno´Â ÀÌ ÇÔ¼ö¿¡¼ Á¤ÀÇÇÑ ¿¡·¯»óȲÀÌ ´Ù.
EAGAIN
ÀϹÝÀûÀ¸·Î write ¸í·ÉÇÏ¿¡¼ ºí·Ï¾²±â µ¿ÀÛÀº ¿Ïº®ÇÏ´Ù. ±×·¯³ª ¸¸ÀÏ ±× ÆÄÀÏ¿¡¼ O_NONBLOCK Ç÷¡±×°¡ ¼³Á¤µÇ¾î ÀÖ´Ù¸é, ±×°ÍÀº ¾î¶² µ¥ÀÌÅ͵µ ¾²Áö¾Ê°í °ð¹Ù·Î ¸®ÅÏÇϰí, ¿¡·¯¸¦ ¹ß»ýÇÑ´Ù. ±× »óȲ¿¡ ´ëÇÑ ÇϳªÀÇ ¿¹´Â ÇÁ·Î¼¼½º°¡ Ãâ·ÂÇÏ·Á´Â ºí·ÏÀ» STOP ¹®ÀÚ¸¦ ¹Þ¾ÆµéÀÓÀ¸·Î ÀÎÇØ Ãâ·ÂÀÌ ÀϽà Áߴܵǰí, È帧Á¦¾î¸¦ Áö¿øÇÏ´Â Å͹̳¯ µð¹ÙÀ̽º¿¡ ¾²±â¸¦ ½ÃµµÇÒ ¶§ ¹ß»ýÇÑ´Ù.
ȣȯ¼º ³ëÆ® : BSD UnixÀÇ ´ëºÎºÐÀÇ ¹öÀüÀº À̰ÍÀ» À§ÇÑ ´Ù¸¥ ¿¡·¯Äڵ带 »ç¿ëÇÑ´Ù: EWOULDBLOCK. GNU ¶óÀ̺귯¸®¿¡¼´Â, EWOULDBLOCKÀº EAGAINÀÇ ´Ù¸¥À̸§ÀÌ´Ù. ±×·¡¼ ´ç½ÅÀÌ ¾î¶² À̸§À» »ç¿ëÇØ µµ ¹®Á¦°¡ ¹ß»ýµÇÁö ¾Ê´Â´Ù. ¾î¶² ½Ã½ºÅÛµéÀº, Ưº°ÇÑ ¹®ÀÚ ÆÄÀϷκÎÅÍ µ¥ÀÌÅÍÀÇ Å« µ¢¾î¸®¸¦ ¾²·Á ÇÒ ¶§, ¸¸ÀÏ Ä¿³Î(kernal)ÀÌ ´ç½ÅÀÇ °ÍÀ» ´ãÀ»¼ö ÀÖ´Â( to lock down the user's pages ), ÃæºÐÇÑ ¹°¸®Àû ¸Þ¸ð¸®¸¦ ¾òÀ»¼ö ¾ø´Â °æ¿ì¿¡ EAGAINÀÇ ¿¡·¯¸¦ ³»°í ½ÇÆÐÇßÀ½À» ÁöÀûÇÑ´Ù. µð¹ÙÀ̽º°¡ »ç ¿ëÀÚÀÇ ¸Þ¸ð¸® ¿µ¿ªÀ» Á÷Á¢ÀûÀ¸·Î ¾ï¼¼½ºÇÏ´Â °ÍÀÌ Á¦ÇѵǾî ÀÖ´Â °ÍÀº ±×µéÀº Ä¿³Î³»ºÎÀÇ ºÐ¸®µÈ ¹öÆÛ¸¦ »ç¿ëÇϱ⠶§¹®ÀÌ´Ù. ±×°Í¿¡ Å͹̳¯µéÀº Æ÷ÇÔµÇÁö ¾Ê´Â´Ù,
EBADF
filedes Àμö´Â À¯¿ëÇÑ ÆÄÀÏ ±â¼úÀÚ°¡ ¾Æ´Ï´Ù.
EFBIG
ÆÄÀÏÀÇ Å©±â°¡ ±× ½ÇÇà¿¡¼ Áö¿øÇÒ ¼ö ÀÖ´Â °Íº¸´Ù Å©´Ù.
EINTR
write ¿ÀÆÛ·¹À̼ÇÀº ¸í·ÉÀÌ ¿ÏÀüÈ÷ ¼öÇàµÉ¶§±îÁö ±â´Ù¸®´Â µ¿¾È ½ÅÈ£¿¡ ÀÇÇØ ÀÎÅÍ·´Æ® µÇ¾îÁ³´Ù. 21.5Àý [Interrupted Primitives] 293ÆäÀÌÁö ÂüÁ¶.
EIO
¸¹Àº µð¹ÙÀ̽ºµé, ±×¸®°í µð½ºÅ© ÆÄÀϵéÀ» À§ÇÏ¿©, ÀÌ ¿¡·¯´Â Çϵå¿þ¾î ¿¡·¯¸¦ ÁöÀûÇÑ´Ù. EIO´Â ¶Ç ÇÑ Á¦¾î ÁßÀÎ Å͹̳¯·ÎºÎÅÍ ¹è°æ ÇÁ·Î¼¼½º°¡ Àб⸦ ½ÃµµÇϰí, SIGTTINÀÇ ½ÅÈ£°¡ ¾Æ¹«·± µ¿ÀÛµµ ÇÏÁö ¾Ê°í º¸³»Áü¿¡ ÀÇÇØ ¸ØÃá ÇÁ·Î¼¼½ºÀÇ ÀϹÝÀû µ¿ÀÛ¿¡ ´ëÇØ ¹ß»ýÇÑ´Ù. À̰ÍÀº ¸¸¾à ½ÅÈ£°¡ ºí·Ï µÇ¾îÁö°Å³ª ¹«½ÃµÇ°Å³ª, ÇÁ·Î¼¼½º ±×·ìÀÌ ºÎ¸ð ÇÁ·Î¼¼½º¸¦ ÀÒ¾î¹ö·È´Ù¸é, ¹ß»ýµÇ¾îÁú °ÍÀÌ´Ù. 24Àå [Job Control], 335ÆäÀÌÁö¸¦ ÂüÁ¶Çؼ job control¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸¸¦ ¾ò°í, 21Àå [Signal Handling] 271ÆäÀÌÁö¸¦ ÂüÁ¶Çؼ, ½ÅÈ£¿¡ ´ëÇÑ Á¤º¸¸¦ ÂüÁ¶Ç϶ó.
ENOSPC
µð¹ÙÀ̽º°¡ Â÷ÀÖ´Ù.
EPIPE
ÀÌ ¿¡·¯´Â ¾î´À ÇÁ·Î¼¼½º¿¡ ÀÇÇØ¼ ÀбâÀ§ÇØ °³¹æµÇÁö ¾Ê´Â ÆÄÀÌÇÁ³ª FIFO¿¡ ¾²·Á ½ÃµµÇÒ ¶§ ¸®ÅÏ µÈ´Ù. À̰ÍÀÌ ¹ß»ýµÉ ¶§, SIGPIPE ½ÅÈ£¸¦ ÇÁ·Î¼¼½º¿¡ º¸³½´Ù; 21Àå [Signal Handling] 271ÆäÀÌÁö Âü Á¶.
´ç½ÅÀÌ EINTR ½ÇÆÐ¸¦ ¹æÁöÇϱâ À§ÇØ Á¶Á¤ÇÏÁö ¾Ê¾Ò´Ù¸é, ´ç½ÅÀº ½ÇÆÐÇÑ writeÀÇ È£Ãâ¿¡ ´ëÇØ¼ errno¸¦ Ã¼Å©ÇØ¾ßÇÒ °ÍÀÌ´Ù. ±×¸®°í ¸¸ÀÏ errno°¡ EINTR À̶ó¸é, ±×³É °£´ÜÇÏ°Ô ´Ù½Ã È£ÃâÇØÁÖ¸é µÈ´Ù. 21.5Àý [Interrupted Primitives] 293ÆäÀÌÁö ÂüÁ¶. À̰ÍÀ» ÇÏ´Â ½¬¿î ¹æ¹ýÀ¸·Î ¸¶Å©·Î TEMP_FAILURE_RETRY °¡ ÀÖ´Ù. ´ÙÀ½Ã³·³:
nbytes = TEMP_FAILURE_RETRY (write (desc, buffer, ount));
write ÇÔ¼ö´Â fputcó·³ ½ºÆ®¸²¿¡ ¾²´Â ¸ðµç ÇÔ¼öµé¿¡ ±âº»ÀûÀ¸·Î Æ÷ÇÔ µÇ¾î ÀÖ´Ù.
8.3 ±â¼úÀÚÀÇ ÆÄÀÏ À§Ä¡ ¼³Á¤Çϱâ.
´ç½ÅÀÌ fseek·Î ½ºÆ®¸²ÀÇ ÆÄÀÏ À§Ä¡¸¦ ¼³Á¤ÇÒ¼ö Àִ°Íó·³, ´ç½ÅÀº lseek¸¦ ÅëÇØ¼ ±â¼úÀÚÀÇ ÆÄÀÏ À§Ä¡¸¦ ¼³Á¤ÇÒ¼ö ÀÖ´Ù. À̰ÍÀº ´ÙÀ½¿¡ Àаųª ¾µ ¸í·ÉÀ» À§ÇØ ÆÄÀÏÀÇ À§Ä¡¸¦ Á¤ÇÑ´Ù. ÆÄÀÏÀÇ À§Ä¡ ¿Í ±×°ÍÀÌ ¾î¶² Àǹ̸¦ °®´ÂÁö¿¡ ´ëÇÑ Á¤º¸¸¦ 7.15Àý [File Position] À» ÂüÁ¶Ç϶ó. ±â¼úÀڷκÎÅÍ Çö Àç ÆÄÀÏ À§Ä¡ÀÇ °ªÀ» ÀÐÀ¸·Á¸é, lseek(desc, 0, SEEK_CUR)À» »ç¿ëÇ϶ó.
ÇÔ¼ö : off_t lseek (int filedes, off_t offset, int whence)
lseek ÇÔ¼ö´Â ±â¼úÀÚ filedes ÆÄÀÏÀÇ ÆÄÀÏ À§Ä¡¸¦ º¯°æÇϱâ À§ÇØ »ç¿ëµÈ´Ù. whence Àμö´Â fseek¿Í °°Àº ¹æ¹ýÀ¸·Î »ç¿ëµÇ¾î offsetÀ» ¾î¶»°Ô ÇØ¼®µÇ¾î¾ß ÇÏ´ÂÁö¸¦ Á¤Çϰí, ½Éº¼ »ó¼ö SEEK_SET, SEEK_CUR, SEEK_ENDÁß¿¡ Çϳª°¡ µÉ ¼ö ÀÖ´Ù.
SEEK_SET
À̰ÍÀº ÆÄÀÏÀÇ ½ÃÀÛÁ¡À» ±âÁØÀ¸·Î ¹®ÀÚµéÀÇ ¼ö¸¦ ¼ÀÇÑ´Ù.
SEEK_CUR
ÇöÀçÀÇ ÆÄÀÏ À§Ä¡¸¦ ±âÁØÀ¸·Î ¹®ÀÚµéÀÇ ¼ö¸¦ ¼ÀÇÑ´Ù. ¿©±â¼ ¹®ÀÚµéÀÇ ¼ö(count)´Â ¾çÀ̳ª À½ÀÇ °ª ÀÌ µÇ¾îÁø´Ù.
SEEK_END
ÆÄÀÏÀÇ ³¡À» ±âÁØÀ¸·Î ¹®ÀÚµéÀÇ ¼ö¸¦ ¼ÀÇÑ´Ù. À½ÀÇ °ªÀº ÇöÀçÀÇ ÆÄÀÏ ¾ÈÀÇ ¿µ¿ªÀ¸·Î ÆÄÀÏÀÇ À§Ä¡¸¦ Á¤ÇÑ´Ù; ¾çÀÇ °ªÀº ÇöÀ纸´Ù ¾ÕÀÇ ¿µ¿ªÀ¸·Î ÆÄÀÏ À§Ä¡¸¦ Á¤ÇÑ´Ù. ÆÄÀÏ À§Ä¡¸¦ ¾ÕÀÇ ¿µ¿ªÀ¸·Î Á¤Çϰí, ½ÇÁ¦·Î µ¥ÀÌÅ͸¦ ¾²¸é, ¿ø·¡ÀÇ ÆÄÀÏÀÇ ³¡Á¡¿¡¼ ÇöÀçÀÇ ÆÄÀÏÀ§Ä¡ »çÀÌÀÇ ºó °ø°£Àº 0À¸·Î ä¿öÁö°í, °á±¹ ÆÄÀÏÀº È®ÀåµÇ´Â °ÍÀÌ´Ù.
lseek¸¦ ÅëÇÑ ¸®ÅϰªÀº º¸Åë ÆÄÀÏÀÇ ½ÃÀÛÁ¡ºÎÅÍ ¹ÙÀÌÆ®ÀÇ ¼ö¸¦ °è»êÇÑ ÆÄÀÏÀÇ À§Ä¡ÀÌ´Ù. ´ç½ÅÀº ÇöÀçÀÇ ÆÄÀÏ À§Ä¡¸¦ ÀбâÀ§ÇØ SEEK_CUR¿Í ÇÔ²² lseek¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ÆÄÀÏÀÇ ÇöÀçÀÇ ³¡ Á¡À» ³Ñ¾î¼± °÷À¸·Î ÆÄÀÏÀÇ À§Ä¡¸¦ ¼³Á¤ÇÒ ¼ö Àִµ¥, À̰ÍÀº ½º½º·Î ÆÄÀÏÀÇ ±æÀ̸¦ ±æ°Ô ¸¸µå´Â °Í ÀÌ ¾Æ´Ï´Ù; lseek´Â °áÄÚ ÆÄÀÏÀ» º¯È½ÃŰÁö ¾Ê´Â´Ù. ±×·¯³ª ±× À§Ä¡¿¡¼ ±×ÈÄ¿¡ ÀϾ´Â Ãâ·ÂÀº ÆÄ ÀÏÀÇ Å©±â¸¦ È®ÀåÇÒ °ÍÀÌ´Ù.
¿ªÀÚÁÖ : Áï... ÆÄÀÏÀÇ ³¡À» ³Ñ¾î¼± °÷À¸·Î ÆÄÀÏÀÇ À§Ä¡¸¦ ¼³Á¤ÇÏ°í ´ÙÀ½¿¡ ±× À§Ä¡¿¡¼ ±× ÆÄÀÏ¿¡ ¹«¾ð°¡¸¦ ¾´´Ù¸é ¿ø·¡ÀÇ ÆÄÀÏÀÇ ³¡Á¡°ú ±Ý¹æ ÆÄÀÏ¿¡ ¾´ µ¥ÀÌÅÍ »çÀÌÀÇ ºó °ø°£Àº 0À¸·Î ä¿öÁö°í ÆÄÀÏÀº È®ÀåµÈ °á°ú¿¡ À̸¥´Ù... ±×¸»Àεí.
¸¸ÀÏ ÆÄÀÏÀÇ À§Ä¡¸¦ º¯°æÇÒ ¼ö ¾ø°Å³ª, ±× ¸í·ÉÀÌ À¯¿ëÇÏÁö ¸øÇÑ »óȲÀ̶ó¸é, lseek´Â -1ÀÇ °ªÀ» ¸® ÅÏÇÑ´Ù. ´ÙÀ½ÀÇ errno´Â ÀÌ ÇÔ¼ö¿¡¼ Á¤ÀÇÇÑ ¿¡·¯ÀÇ »óȲÀÌ´Ù.
EBADF
filedes´Â À¯¿ëÇÑ ÆÄÀÏ ±â¼úÀÚ°¡ ¾Æ´Ï´Ù.
EINVAL
whenceÀμö°¡ À¯¿ëÇÏÁö ¾Ê°Å³ª, °á°ú·Î ¾òÀº ÆÄÀÏ offset ÀÌ À¯¿ëÇÏÁö ¾ÊÀº °ÍÀÌ´Ù.
ESPIPE
filedes°¡ À§Ä¡¸¦ ¼³Á¤ÇÒ ¼ö ¾ø´Â ÆÄÀÌÇÁ³ª, FIFO¿¡ ÇØ´çÇÑ´Ù. ( ÆÄÀÏÀÇ À§Ä¡¸¦ ¼³Á¤ÇÒ ¼ö ¾ø´Â ´Ù¸¥ ÆÄÀÏÀÇ Á¾·ùµµ ÀÖ°ÚÁö¸¸, ±×°ÍµéÀÇ °æ¿ì´Â Á¤ÇØÁ® ÀÖÁö ¾Ê´Ù. )
lseek ÇÔ¼ö´Â ÆÄÀÏ ±â¼úÀÚ ´ë½Å¿¡ ½ºÆ®¸²¿¡¼ ¸í·ÉÀ» ¼öÇàÇÏ´Â fseek, ftell°ú rewindÇÔ¼ö¸¦ À§ÇØ ±â º»ÀûÀ¸·Î Æ÷ÇԵǾîÁ® ÀÖ´Ù.
´ç½ÅÀÌ ¸¸ÀÏ ¿©·¯¹ø °°Àº ÆÄÀÏÀ» °³¹æÇϰųª, dupÀ» ÅëÇØ¼ ±â¼úÀÚ¸¦ Áߺ¹½ÃŲ´Ù¸é °°Àº ÆÄÀÏ¿¡ ´ÙÁßÀÇ ±â¼úÀÚ¸¦ °¡Áú ¼ö ÀÖ´Ù. ºÐ¸®µÈ openÀÇ È£ÃâÀ» ÅëÇØ¼ ¾òÀº ±â¼úÀÚ´Â µ¶¸³ÀûÀÎ ÆÄÀÏ À§Ä¡¸¦ °¡Áø´Ù; ÇÑ ±â¼úÀÚ¿¡ lseek¸¦ »ç¿ëÇÏ´Â °ÍÀº ´Ù¸¥°Í¿¡ ¾Æ¹«·± ¿µÇâÀÌ ¾ø´Ù.
¿¹¸¦ µé¾î,
{
int d1, d2;
char buf[4];
d1 = open ("foo", O_RDONLY);
d2 = open ("foo", O_RDONLY);
lseek (d1, 1024, SEEK_SET);
read (d2, buf, 4);
}
À̰ÍÀº 'foo'ÆÄÀÏÀÇ Ã³À½ ³× °³ÀÇ ¹®ÀÚµéÀ» ÀÐÀ» °ÍÀÌ´Ù.( ½ÇÁ¦ÀÇ ÇÁ·Î±×·¥¿¡¼´Â ÇÊ¿äÇÑ ¿¡·¯ °Ë»ö Äڵ尡 ¿©±â¼´Â °£°áÇÔÀ» ÀÌÀ¯·Î »ý·«µÇ¾îÁ® ÀÖ´Ù. )
ºñ±³Çؼ, dup·Î ¸¸µé¾îÁø Áߺ¹µÈ ±â¼úÀÚ´Â º¸ÅëÀÇ ÆÄÀÏ À§Ä¡µµ Áߺ¹Çؼ »ç¿ëÇÑ´Ù. Áߺ¹µÈ ÆÄÀÏ ±â¼úÀÚÁß Çϳª°¡ Àаųª ¾²´Â µ¿ÀÛÀÌ Æ÷ÇÔµÈ, ÆÄÀÏ À§Ä¡¸¦ º¯°æÇÏ´Â ¾î´À µ¿ÀÛÀ» Çϸé, ±×µé ¸ðµÎ¿¡ °Ô ¿µÇâÀÌ ¹ÌÄ£´Ù.
±×·¡¼ ¿¹¸¦ µé¸é,
{
int d1, d2, d3;
char buf1[4], buf2[4];
d1 = open ("foo", O_RDONLY);
d2 = dup (d1);
d3 = dup (d2);
lseek (d3, 1024, SEEK_SET);
read (d1, buf1, 4);
read (d2, buf2, 4);
}
À̰ÍÀº ÆÄÀÏ 'foo'ÀÇ 1024¹øÂ° ¹®ÀÚ¸¦ ½ÃÀÛÀ¸·Î ÇØ¼ ³× °³ÀÇ ¹®ÀÚ¸¦ Àаí, 1028¹øÂ° ¹®ÀÚ¸¦ ½ÃÀÛÀ¸ ·Î ´Ù½Ã ³× °³ÀÇ ¹®ÀÚ¸¦ Àд´Ù.
µ¥ÀÌÅÍ Å¸ÀÔ : off__t
À̰ÍÀº ÆÄÀÏ À§Ä¡¸¦ ³ªÅ¸³»±â À§ÇÑ ¼öÄ¡Àû µ¥ÀÌÅÍ Å¸ÀÔ´Ï´Ù. GNU½Ã½ºÅÛ¿¡¼´Â À̰ÍÀº fpos_t³ª long int¿Í µ¿ÀÏÇÏ´Ù.
´ÙÀ½ 'SEEK_. . .'¸¦ À§ÇÑ ¼¼ °³´Â ¿À·¡µÈ ¹öÀüÀÇ BSD ½Ã½ºÅÛµé°úÀÇ È£È¯À» ¸ñÀûÀ¸·Î Á¸ÀçÇÑ´Ù. ±×µéÀº µÎ °³ÀÇ ´Ù¸¥ Çì´õÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ´Ù: 'fnctl.h'¿Í 'sys'file.h'
L_SET SEEK_SETÀÇ ´Ù¸¥ À̸§.
L_INCR SEEK_CURÀÇ ´Ù¸¥ À̸§.
L_XTND SEEK_ENDÀÇ ´Ù¸¥ À̸§.
8.4 ±â¼úÀÚ¿Í ½ºÆ®¸².
openÀ» ÅëÇØ ÁÖ¾îÁø ÆÄÀÏ ±â¼úÀÚ¿¡, ´ç½ÅÀº fdopenÇÔ¼ö¸¦ °¡Áö°í ±× ±â¼úÀÚ¸¦ À§ÇÑ ½ºÆ®¸²À» ¸¸µé ¼ö ÀÖ´Ù. ´ç½ÅÀº filenoÇÔ¼ö¸¦ °¡Áö°í ÇöÁ¸ÇÏ´Â ½ºÆ®¸²ÀÇ ÆÄÀÏ ±â¼úÀÚ¸¦ ¾òÀ» ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼öµéÀº Çì´õÆÄÀÏ 'stdio.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÇÔ¼ö : FILE * fdopen (int filedes, const char *opentype)
fdopenÇÔ¼ö´Â ÆÄÀÏ ±â¼úÀÚ filedes¸¦ À§ÇÑ »õ·Î¿î ½ºÆ®¸²À» ¸®ÅÏÇÑ´Ù. opentype Àμö´Â 'b'¿É¼ÇÀÌ Çã¿ëµÇÁö ¾Ê´Â °ÍÀ» Á¦¿ÜÇϰí´Â, fopenÇÔ¼ö ¿Í °°Àº ¹æ¹ýÀ¸·Î »ç¿ëµÈ´Ù( 7.3Àý [Opening Streams] 64ÆäÀÌÁö ÂüÁ¶).
; 'b' ¿É¼ÇÀÌ Çã¿ëµÇÁö ¾Ê´Â °ÍÀº GNU ½Ã½ºÅÛÀÌ ÅØ½ºÆ®¿Í ¹ÙÀ̳ʸ® ÆÄÀÏÀÇ Â÷À̸¦ ±¸ºÐÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ¶ÇÇÑ "w"¿Í "w+"°¡ ÆÄÀÏÀ» Àß¶ó³»´Â È¿°ú¸¦ ³»Áö¸øÇÑ´Ù; ±×°ÍÀº ±× ¿É¼ÇµéÀÌ ÆÄÀÏÀ» °³ ¹æÇÒ¶§¸¸ ¿ÀÁ÷ ¿µÇâÀ» ¹ÌÄ¡´Âµ¥, ÀÌ °æ¿ì¿¡´Â ÆÄÀϵéÀÌ ÀÌ¹Ì °³¹æµÇ¾ú´ø °ÍÀ̱⠶§¹®ÀÌ´Ù. ´ç½ÅÀº opentypeÀμö¸¦ °³¹æÇÑ ÆÄÀÏ ±â¼úÀÚÀÇ ½ÇÁ¦ ¸ðµå¿Í ÀÏÄ¡½ÃÄѾ߸¸ ÇÑ´Ù.
¸®ÅϰªÀº »õ·Î¿î ½ºÆ®¸²ÀÌ´Ù. ¸¸ÀÏ ½ºÆ®¸²ÀÌ ¸¸µé¾îÁöÁö ¸øÇÑ´Ù¸é, ( ¿¹¸¦ µé¾î, ÆÄÀÏ ±â¼úÀÚ¿¡ ÀÇ ÇØ Á¤ÇØÁø ÆÄÀÏÀÇ ¸ðµå°¡ opentype Àμö¿¡¼ ÁöÁ¤ÇÑ ¾ï¼¼½º¸¦ Çã¿ëÇÏÁö ¾ÊÀ» ¶§ ), ³Î Æ÷ÀÎÅ͸¦ ¸® ÅÏÇÑ´Ù. fdopenÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¿¹´Â 10.1Àý [Creating a Pipe] 145 ÆäÀÌÁö¸¦ ÂüÁ¶.
ÇÔ¼ö : int fileno (FILE *stream)
ÀÌ ÇÔ¼ö´Â ½ºÆ®¸² stream°ú ¿¬°üµÈ ÆÄÀÏ ±â¼úÀÚ¸¦ ¸®ÅÏÇÑ´Ù. ¸¸ÀÏ ¿¡·¯°¡ °ËÃâµÇ°Å³ª( ¿¹¸¦ µé¾î, ¸¸ÀÏ ±× ½ºÆ®¸²ÀÌ À¯¿ëÇÏÁö ¾Ê´Ù¸é ), ¸¸ÀÏ ½ºÆ®¸²ÀÌ ÆÄÀÏ¿¡ ÀÔ/Ãâ·ÂÀ» ÇÒ¼ö ¾ø´Ù¸é, fileno´Â -1À» ¸®ÅÏÇÑ´Ù. Ç¥ÁØ ½ºÆ®¸² stdin, stdout °ú stderr¿¡ ¼ÓÇÑ ÆÄÀÏ ±â¼úÀÚ¸¦ À§ÇÑ ½Éº¼ »ó¼ö°¡ 'unistd.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.; 7.2Àý [Standare Streams] 63ÆäÀÌÁö ÂüÁ¶.
STDIN_FILENO
ÀÌ ¸¶Å©·Î´Â Ç¥ÁØ ÀÔ·ÂÀ» À§ÇÑ ÆÄÀÏ ±â¼úÀÚ·Î 0ÀÇ °ªÀ» °¡Áø´Ù.
STDOUT_FILENO
ÀÌ ¸¶Å©·Î´Â Ç¥ÁØ Ãâ·ÂÀ» À§ÇÑ ÆÄÀÏ ±â¼úÀÚ·Î 1ÀÇ °ªÀ» °¡Áø´Ù.
STDERR_FILENO
ÀÌ ¸¶Å©·Î´Â Ç¥ÁØ ¿¡·¯ Ãâ·ÂÀ» À§ÇÑ ÆÄÀÏ ±â¼úÀÚ·Î 2ÀÇ °ªÀ» °¡Áø´Ù.
8.5 ½ºÆ®¸²°ú ±â¼úÀÚ È¥¿ëÀÇ À§Çè.
´ç½ÅÀº µ¿ÀÏÇÑ ÆÄÀϰú ¿¬°áµÈ ´ÙÁßÀÇ ÆÄÀÏ ±â¼úÀÚ¿Í ½ºÆ®¸²À» °¡Áú ¼ö ÀÖ´Ù( ª°Ô ½ºÆ®¸²°ú ±â¼úÀÚ ¸¦ "ä³Î" À̶ó ºÎ¸£ÀÚ), ±×·¯³ª ´ç½ÅÀº ä³Îµé »çÀÌÀÇ È¥¶õÀ» ÇÇÇϵµ·Ï ÁÖÀÇÇØ¾ß¸¸ ÇÑ´Ù. °í·ÁÇØ¾ß ÇÏ´Â µÎ°¡Áö °æ¿ì°¡ ÀÖ´Ù: ´ÜÀÏÇÑ ÆÄÀÏ À§Ä¡¸¦ °®°í ÀÖ´Â ¿¬°áµÈ ä³Î°ú, ±×µé ÀÚ½ÅÀÇ ÆÄÀÏ À§Ä¡¸¦ °®°í ÀÖ´Â µ¶¸³Àû ä³Î
¸ðµç ¾ï¼¼½º°¡ ÀÔ·ÂÀ» À§ÇѰÍÀÓÀ» Á¦¿ÜÇϰí´Â, ¾î´À ÁÖ¾îÁø ÆÄÀÏ¿¡¼ ½ÇÁ¦ÀÇ µ¥ÀÌÅ͸¦ ÂüÁ¶Çϱâ À§ ÇØ¼´Â ´ç½ÅÀÇ ÇÁ·Î±×·¥¾È¿¡ ¿ÀÁ÷ ÇϳªÀÇ Ã¤³ÎÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¿¹¸¦ µé¾î ¸¸ÀÏ ´ç½ÅÀÌ ÆÄÀÌ ÇÁ¸¦ °³¹æÇÏ¿©, ( ´ç½ÅÀÌ ÆÄÀÏ ±â¼úÀÚ ¼öÁØ¿¡¼ ÇÒ ¼ö ÀÖ´Â ¾î¶² °Í ), ±â¼úÀÚ¸¦ °¡Áö°í ÀÔ/Ãâ·ÂÀ» Çϰųª, ¶Ç´Â fdopenÀ¸·Î ±â¼úÀڷκÎÅÍ ½ºÆ®¸²À» ±¸¼ºÇÏ°í ½ºÆ®¸²¿¡ ¸ðµç ÀÔ/Ãâ·ÂÀ» ÇÑ´Ù¸é.
8.5.1 ¿¬°áµÈ ä³Îµé.
´Ü ÇÑ ¹ø °³¹æµÈ °ÍÀ¸·ÎºÎÅÍ ¿Â ä³ÎµéÀº µ¿ÀÏÇÑ ÆÄÀÏ À§Ä¡¸¦ Á¡À¯ÇÑ´Ù; ¿ì¸®´Â ±×µéÀ» ¿¬°áµÈ ä ³ÎÀ̶ó ºÎ¸¥´Ù. ¿¬°áµÈ ä³ÎÀº, ´ç½ÅÀÌ fdopenÀ» »ç¿ëÇÏ¿© ±â¼úÀڷκÎÅÍ ½ºÆ®¸²À» ¸¸µé ¶§, fileno¸¦ »ç¿ëÇØ¼ ½ºÆ®¸²À¸·Î ºÎÅÍ ±â¼úÀÚ¸¦ ¾òÀ» ¶§, ±×¸®°í dup³ª dup2¸¦ »ç¿ëÇØ¼ ±â¼úÀÚ¸¦ º¹Á¦ÇÒ ¶§ °á°ú·Î ¾ò°ÔµÈ´Ù. Å͹̳¯°ú ÆÄÀÌÇÁó·³ ·£´ý ¾ï¼¼½º(ÀÓÀÇ Á¢±Ù)°¡ Á¦°øµÇÁö ¾Ê´Â ÆÄÀϵ鿡¼ ¸ðµç ä³ÎµéÀº ½ÇÁ¦·Î ¿¬°áµÇ¾î ÀÖ´Ù. ÀÓÀÇ Á¢±ÙÀÌ °¡´ÉÇÑ ÆÄÀϵ鿡¼´Â ¿¬°áµÈ-ÇüÅÂÀÇ Ãâ·Â ½ºÆ®¸²µé ¸ð µÎ°¡ ¼·Î ¿¬°áµÇ¾î ÀÖ´Ù.
¸¸ÀÏ ´ç½ÅÀÌ ÀÔ/Ãâ·ÂÀ» À§ÇØ ÇÑ ½ºÆ®¸²À» »ç¿ëÇØ ¿À¸é¼, ±×°Í°ú ¿¬°áµÈ ´Ù¸¥ ä³Î(½ºÆ®¸²À̳ª ±â ¼úÀÚ)À» »ç¿ëÇØ¼ ÀÔ/Ãâ·ÂÇϱ⠿øÇÑ´Ù¸é, ´ç½ÅÀº ù°·Î ´ç½ÅÀÌ »ç¿ëÇϰí ÀÖ´ø ±× ½ºÆ®¸²À» Á¤¸®ÇØ ¾ß¸¸ ÇÑ´Ù. 8.5.3Àý [Cleaning Streams] 110 ÆäÀÌÁö ÂüÁ¶.
ÇÁ·Î¼¼½º°¡ Á¾·áÇϰųª, ÇÁ·Î¼¼½º¿¡ »õ·Î¿î ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¸é ±× ÇÁ·Î¼¼½º¾È¿¡ ÀÖ´ø ¸ðµç ½ºÆ® ¸²µéÀº ÆÄ±«µÈ´Ù. ¸¸ÀÏ ÀÌ ½ºÆ®¸²°ú ¿¬°áµÈ ±â¼úÀÚ°¡ ´Ù¸¥ ÇÁ·Î¼¼½º¾È¿¡ »ì¾Æ³²¾Æ ÀÖ´Ù¸é, ±×µé ÆÄ ÀÏÀÇ À§Ä¡´Â Á¤ÀǵÇÁö ¾ÊÀº »óÅ·ΠµÇ°í ¸¸´Ù. À̰ÍÀ» ¹æÁöÇϱâ À§Çؼ, ´ç½ÅÀº ±×µéÀ» ÆÄ±«Çϱâ Àü¿¡ ±× ½ºÆ®¸²µéÀ» Á¤¸®Çؾ߸¸ ÇÑ´Ù.
8.5.2 µ¶¸³Àû ä³Îµé.
ºÐ¸®µÇ¾î Ž»ö °¡´ÉÇÑ Ã¤³Îµé( ½ºÆ®¸²À̳ª ±â¼úÀÚ)À» °³¹æÇÒ ¶§, °¢ ä³ÎµéÀº ÀÚ½ÅÀÇ ÆÄÀÏ À§Ä¡¸¦ °®´Â´Ù. À̵éÀ» µ¶¸³Àû ä³ÎÀ̶ó°í ºÎ¸¥´Ù.
½Ã½ºÅÛÀº µ¶¸³ÀûÀ¸·Î °¢ ä³ÎÀ» Ãë±ÞÇÑ´Ù. °ÅÀÇ ´ëºÎºÐ, À̰ÍÀº ²Ï ¿¹Ãø°¡´ÉÇϰí, ÀÚ¿¬½º·´´Ù(ƯÈ÷ ÀÔ·ÂÀÇ °æ¿ì): °¢ ä³ÎÀº ÆÄÀÏ ¾ÈÀÇ ÀÚ½ÅÀÇ À§Ä¡¿¡¼ ¼øÂ÷ÀûÀ¸·Î Àаųª, ¾µ ¼ö ÀÖ´Ù. ±×·¸Áö¸¸, ¸¸ ÀÏ ¾î¶² ä³ÎµéÀÌ ½ºÆ®¸²À̶ó¸é, ´ç½ÅÀº ÀÌ·± °ÍµéÀ» ÁÖÀÇÇØ¾ßÇÑ´Ù.
o ´ç½ÅÀº ÆÄÀÏÀÇ µ¿ÀÏÇÑ ºÎºÐÀ¸·ÎºÎÅÍ Àаųª ¾²´Â ¾î¶² °ÍÀ» Çϱâ Àü¿¡ »ç¿ëÇÒ Ãâ·Â ½ºÆ®¸²À» ±ú ²ýÀÌ ÇØ¾ßÇÑ´Ù.
o µ¶¸³ÀûÀΠä³ÎÀ» »ç¿ëÇØ¼ º¯°æµÇ¾úÀ» µ¥ÀÌÅ͸¦ Àбâ Àü¿¡´Â ÀÔ·Â ½ºÆ®¸²À» ±ú²ýÀÌ ÇØ¾ßÇÑ´Ù. ±× ·¸Áö ¾ÊÀ¸¸é ´ç½ÅÀº ½ºÆ®¸²ÀÇ ¹öÆÛ¿¡ Á¸ÀçÇϰí ÀÖ´Â ¾µ¸ð ¾ø´Â µ¥ÀÌÅÍ(obsolete data)¸¦ ÀÐ°Ô µÉ °Í ÀÌ´Ù.
¸¸ÀÏ ´ç½ÅÀÌ ÆÄÀÏÀÇ ³¡¿¡ Àִ ä³Î¿¡ Ãâ·ÂÇÏ·Á ÇÑ´Ù¸é, ÀÌ Ã¤³ÎÀº Ãâ·ÂÀ» Çϱâ Àü¿¡ ¾î´À °÷ÀÎÁö ¿¡ ÀÖÀ» ´Ù¸¥ µ¶¸³Àû ä³ÎµéÀ» È®½ÇÈ÷ ¹«½ÃÇÒ °ÍÀÌ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ³¡¿¡ Ãâ·ÂÇϱ⠿øÇÑ´Ù¸é, ´ç½ÅÀº ù°·Î, ÆÄÀÏÀÇ ³¡À¸·Î ±×µé ÆÄÀÏ À§Ä¡¸¦ ¼³Á¤ÇØ¾ß ÇÑ´Ù.( À̰ÍÀº ¿¬°áµÈ-ÇüÅÂÀÇ ±â¼úÀÚ³ª ½ºÆ®¸²¿¡ ¼´Â ÇÊ¿äÄ¡ ¾Ê´Ù; ±×µéÀº Ç×»ó ÆÄÀÏÀÇ ³¡¿¡¼ Ãâ·ÂÇÑ´Ù.) ÆÄÀÏÀÇ ³¡ À§Ä¡¸¦ Á¤È®ÇÏ°Ô ¸¸µé·Á¸é, ´ç ½ÅÀº ¸¸ÀÏ ´ç½ÅÀÌ »ç¿ëÇϰí ÀÖ´Â °ÍÀÌ ½ºÆ®¸²À̶ó¸é Ãâ·Â ä³ÎÀ» ±ú²ýÀÌ ÇØ¾ßÇÑ´Ù. (À̰ÍÀº ½ÉÁö¾î ´ÙÀ½¿¡ ¿¬°áµÈ-ÇüÅÂÀÇ Ã¤³ÎÀ» »ç¿ëÇÏ·Á °èȹÇÒ ¶§µµ ÇÊ¿äÇÏ´Ù.)
ÆÄÀÏÀÌ ·£´ý ¾ï¼¼½º¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù¸é ÆÄÀÏ¿¡¼ ºÐ¸®µÈ ÆÄÀÏ À§Ä¡¸¦ °®°íÀÖ´Â µÎ °³ÀÇ Ã¤³ÎÀ» °®´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. ±×·¯¹Ç·Î, ÆÄÀÏó·³ Àаųª ¾²±â À§ÇÑ Ã¤³ÎµéÀº Ç×»ó ¿¬°áµÇ¾îÀÖ°í, °áÄÚ µ¶ ¸³ÀûÀÌÁö ¾Ê´Ù. ¿¬°áµÈ-ÇüÅÂÀÇ Ã¤³ÎµéÀº Ç×»ó ¿¬°áµÇ¾î ÀÖ´Ù. ÀÌ¿Í °°Àº ä³ÎµéÀ» À§ÇØ ¿¬°áµÈ ä ³ÎµéÀ» À§ÇÑ ±ÔÄ¢À» µû¶ó¾ßÇÑ´Ù; 8.5.1 [Linked Channels] 109ÆäÀÌÁö ÂüÁ¶.
8.5.3 ä³Î ±ú²ýÀÌ Çϱâ
GNU ½Ã½ºÅÛ¿¡¼, ´ç½ÅÀº fcleanÀ» »ç¿ëÇØ¼ ¾î´À ½ºÆ®¸²À» Á¤¸®ÇÒ ¼ö ÀÖ´Ù.
ÇÔ¼ö : int fclean (FILE *stream)
¹öÆÛ¸¦ ºñ¿ì±â À§ÇØ ½ºÆ®¸² streamÀ» ±ú²ýÀÌ ÇÑ´Ù. ¸¸ÀÏ ½ºÆ®¸²ÀÌ Ãâ·ÂÀ» Çϰí ÀÖ´Ù¸é, °Á¦·Î ±× °ÍÀ» Ãâ·ÂÇÑ´Ù. ¸¸ÀÏ ½ºÆ®¸²ÀÌ ÀÔ·ÂÀ» Çϰí ÀÖ´Ù¸é, ¹öÆÛ¿¡ ÀÖ´Â µ¥ÀÌÅÍ´Â ±×°ÍÀ» ´Ù½Ã Àеµ·Ï Á¶Á¤ ÇÏ´Â ½Ã½ºÅÛ¿¡ µÇµ¹·ÁÁØ´Ù. ´Ù¸¥ ½Ã½ºÅ۵鿡¼´Â ´ëºÎºÐÀÇ °æ¿ì ½ºÆ®¸²À» ±ú²ýÀÌ Çϱâ À§Çؼ fflush¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
¸¸ÀÏ ´ç½ÅÀÌ ÀÌ¹Ì ±× ½ºÆ®¸²ÀÌ ±ú²ýÇÏ´Ù¶õ °ÍÀ» ¾È´Ù¸é fcleanÀ̳ª fflush¸¦ °Ç³Ê¶Û ¼ö ÀÖ´Ù. ½ºÆ® ¸²Àº ¹öÆÛ°¡ ºñ¾îÀÖÀ»¶§´Â ±ú²ýÇÏ´Ù. ¿¹¸¦ µé¾î ºñ¹öÆÛÈµÈ ½ºÆ®¸²Àº Ç×»ó ±ú²ýÇÏ´Ù. ±×¸®°í, ÆÄÀÏ ÀÇ ³¡¿¡¼ ÀÔ·Â ½ºÆ®¸²Àº ±ú²ýÇÏ´Ù. ¶óÀÎ ¹öÆÛ ÈµÈ ½ºÆ®¸²Àº ¸¶Áö¸· ¹®ÀÚÃâ·ÂÀÌ »õÁÙ¹®ÀÚ¿´À» ¶§ ±ú²ýÇÏ´Ù.
½ºÆ®¸²À» ±ú²ýÇÏ°Ô ÇÏ´Â °ÍÀÌ ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡¼ ºÒ°¡´ÉÇÑ ÇѰ¡Áö °æ¿ì°¡ ÀÖ´Ù. À̰ÍÀº ½ºÆ®¸² ÀÌ ·£´ý ¾ï¼¼½º°¡ ºÒ°¡´ÉÇÑ ÆÄÀϷκÎÅÍ ÀÔ·ÂÀ» Çϰí ÀÖÀ» ¶§ÀÌ´Ù. ±×¿Í °°Àº ½ºÆ®¸²Àº ÀÌ¹Ì ÀÐÀº °Ë »ö µ¥ÀÌÅ͸¦ µÇµ¹·ÁÁÙ ¾Æ¹«·± ¹æ¹ýÀÌ ¾ø´Ù. ÀÔ·Â ½ºÆ®¸²ÀÌ ·£´ý ¾ï¼¼½º ÆÄÀϷκÎÅÍ ÀÔ·ÂÇÒ ¶§, fflush·Î ½ºÆ®¸²À» ±ú²ýÀÌ ÇÏÁö ¾ÊÀ¸¸é ÆÄÀÏ Æ÷ÀÎÅͰ¡ ¿¹Ãø ºÒ°¡´ÉÇÑ ¿µ¿ª¿¡ ³²°ÜÁø°í ¸¸´Ù; ´ç½ÅÀº ÀÔ/Ãâ·ÂÀ» Çϱâ Àü¿¡ ¸ÕÀú ÆÄÀÏ Æ÷ÀÎÅ͸¦ ¼³Á¤Ç϶ó. GNU ½Ã½ºÅÛ¿¡¼´Â ÀÌ ¹®Á¦µéÀÇ ¾çÂÊÀ» ÇÇÇÏ°Ô ÇÑ´Ù.
¿ÀÁ÷ Ãâ·Â¸¸ °¡´ÉÇÑ ½ºÆ®¸²À» ´ÝÀ» ¶§µµ fflush¸¦ »ç¿ëÇϴµ¥, À̰ÍÀº Ãâ·Â ½ºÆ®¸²À» ±ú²ýÀÌ Çϴµ¥ À¯¿ëÇÑ ¹æ¹ýÀÌ´Ù. GNU ½Ã½ºÅÛ¿¡¼´Â, ÀÔ·Â ½ºÆ®¸²À» ´ÝÀ» ¶§ fcleanÀ» »ç¿ëÇÑ´Ù.
´ç½ÅÀº Å͹̳¯ ¸ðµå¸¦ ¼³Á¤ÇÏ´Â °Í°ú °°Àº Á¦¾î ¸í·ÉÀ» À§ÇØ ±â¼úÀÚ¸¦ »ç¿ëÇϱâ Àü¿¡´Â ½ºÆ®¸²À» ±ú²ýÀÌ ÇÒ Çʿ䰡 ¾ø´Ù; ÀÌµé ¸í·ÉµéÀº ÆÄÀÏ À§Ä¡¿¡ ¿µÇâÀ» ¹ÞÁö ¾Ê°í, ±×°Í¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê´Â ´Ù. ´ç½ÅÀº ÀÌ ¸í·ÉµéÀº À§Çؼ´Â ¾î´À ±â¼úÀÚ¶óµµ »ç¿ëÇÒ ¼ö ÀÖ°í, ¸ðµç ä³ÎµéÀº µ¿½Ã¿¡ ¿µÇâÀ» ¹Þ´Â´Ù. ±×·¸Áö¸¸, ½ºÆ®¸²¿¡ ÀÇÇØ »õ·Î¿î Å͹̳¯ ¸ðµå·Î ¼³Á¤µÇ¾îÁú ½ºÆ®¸²ÀÌ ¿©ÀüÈ÷ "Ãâ·Â"À» °®°í ¹öÆÛ ÈµÈ »óŶó¸é Ç÷¯½¬µÇ¾îÁø´Ù. "¾ÕÀ¸·Î"ÀÇ Ãâ·ÂÀ» È®½ÇÈ÷ Çϱâ À§ÇØ Å͹̳¯¸ðµåÀÇ ¼³Á¤ÀÌ µ¿ ½Ã¿¡ ¿µÇâÀ» ¹Þµµ·Ï µÇ¾îÁ³°í, ±× ¸ðµå¸¦ ¼³Á¤Çϱâ Àü¿¡ Å͹̳¯ÀÇ ¸ðµç Ãâ·Â ½ºÆ®¸²µéÀ» Ç÷¯½¬ÇÑ´Ù. 12.4Àý[Terminal Modes], 186ÆäÀÌÁö ÂüÁ¶.
8.6 ÀÔ·ÂÀ̳ª Ãâ·ÂÀ» À§ÇÑ ±â´Ù¸².
¶§¶§·Î ÇÁ·Î±×·¥µéÀº ÀÔ·ÂÀÌ µµÂøÇÒ ¶§¸¶´Ù ´ÙÁß ÀԷ ä³Îµé·ÎºÎÅÍ ÀÔ·ÂÀ» ¹Þ¾ÆµéÀÏ Çʿ䰡 ÀÖ´Ù. ¿¹¸¦ µé¾î, ¾î¶² ¿öÅ©½ºÅ×À̼ǵéÀº º¸ÅëÀÇ ºñµ¿±âÀû Á÷·Ä ÀÎÅÍÆäÀ̽º¸¦ °æÀ¯ÇÏ¿© ¿¬°áµÈ, µðÁöŸÀÌ¡ ÅÂºí¸´ (¿ªÀÚÁÖ: ÄÄÇ»ÅÍ¿¡ ÁÂÇ¥ À§Ä¡¸¦ ÀÔ·ÂÇÏ´Â ÀåÄ¡), ÇÔ¼ö ¹öư ¹Ú½º ( ¿ªÀÚÁÖ: ¹öưµéÀÌ ¸ð¿©ÀÖ ´Â ¹Ú½º·Î, ¹öư Çϳª°¡ ÇѰ¡Áö ÇÔ¼ö¸¦ ¼öÇàÇÏ´Â ±â´ÉÀ» ÇÏ´Â °Í.. Àϰɿä? ), ȤÀº ´ëȹڽº( ¿ªÀÚ ÁÖ : ´ëÈ»óÀÚ)¿Í °°Àº µð¹ÙÀ̽ºµéÀ» °®°í ÀÖÀ» °ÍÀÌ´Ù; ÁÁÀº À¯Àú ÀÎÅÍÆäÀ̽ºÀÇ ½ºÅ¸ÀÏÀº ¾î´À µð ¹ÙÀ̽º»ó¿¡¼ µé¾î¿Â ÀԷ¿¡ ´ëÇÑ Áï°¢ÀûÀÎ ´ëÀÀÀÌ ÇÊ¿äÇÏ´Ù. ´Ù¸¥ ¿¹·Î½á, ÆÄÀÌÇÁ³ª ¼ÒÄϵéÀ» °æÀ¯ ÇÑ ¿©·¯ °¡Áö ´Ù¸¥ ÇÁ·Î¼¼½ºµé¿¡°Ô ¼¹ö·Î¼ µ¿ÀÛÇÏ´Â ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù.
´ç½ÅÀº ÀÌ·¯ÇÑ ¸ñÀûÀ¸·Î´Â read¸¦ »ç¿ëÇÒ ¼ö ¾ø´Âµ¥, ¿Ö³ÄÇϸé ÇÁ·Î±×·¥Àº ¾î¶² ƯÁ¤ÇÑ ÆÄÀÏ ±â¼ú ÀÚ »ó¿¡¼ À¯¿ëÇÑ ÀÔ·ÂÀÌ ÀÖÀ» ¶§±îÁö ºí·Ï µÇ¾îÁö±â ¶§¹®ÀÌ´Ù. (¿ªÀÚÁÖ : ¿©±â¼ ºí·ÏÀÇ °³³äÀº ÀÔ ·ÂÀ» ¾òÁö ¸øÇؼ ¾Æ¹«·± ÀÛ¾÷µµ ¼öÇàÇÒ ¼ö ¾ø´Â »óÅ¿¡ óÇÑ °ÍÀ» ¸»ÇÔ. ); ´Ù¸¥ ä³Îµé¿¡¼µµ ÀÔ ·ÂÀ» ¹ß»ýÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ´ç½ÅÀº ºñºí·°È ¸ðµå·Î ¼³Á¤Çϰí Â÷·Ê·Î °¢ ±â¼úÀÚµéÀ» µ¹¾Æº¼ ¼ö ÀÖ Áö¸¸, À̰ÍÀº ¸Å¿ì ºñ´É·üÀûÀÌ´Ù.
¿©±â¿¡ ´ëÇÑ ÈǸ¢ÇÑ ÇØ°áÃ¥À¸·Î´Â selectÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. À̰ÍÀº ¼³Á¤µÈ ±â¼úÀÚµéÀÌ ÀÔ·ÂÀÌ ³ª Ãâ·Â Áغñ»óŰ¡ µÉ ¶§±îÁö, ¶Ç´Â ¼³Á¤µÈ ½Ã°£ÀÌ ³¡³¯¶§±îÁöµî À̰ÍÁß ¾î¶² °ÍÀÌ¶óµµ ¸ÕÀú µÉ ¶§ ±îÁö ÇÁ·Î±×·¥À» ºí·Ï ½ÃŲ´Ù. ÀÌ µµ±¸´Â Çì´õÆÄÀÏ 'sys/types.h'¿¡ ÀÖ´Ù.
select ÇÔ¼ö¸¦ À§Çؼ ÆÄÀÏ ±â¼úÀÚ¸¦ ¼³Á¤ÇÏ´Â °ÍÀº fd_set ¿ÀºêÁ§Æ®¸¦ ÅëÇØ¼ ÀÌ·ç¾îÁø´Ù. ´ÙÀ½Àº ÀÌµé ¿ÀºêÁ§Æ®µéÀ» ´Ù·ç±â À§ÇÑ µ¥ÀÌÅÍ Å¸ÀÔ°ú ¸¶Å©·Î µéÀ» ¼³¸íÇÑ´Ù.
µ¥ÀÌÅÍŸÀÔ : fd__set
fd_set µ¥ÀÌÅÍ Å¸ÀÔÀº selectÇÔ¼ö¸¦ À§Çؼ ¼³Á¤ÇÏ´Â ÆÄÀÏ ±â¼úÀÚ¸¦ ³ªÅ¸³½´Ù. À̰ÍÀº ½ÇÁ¦·Î ºñÆ® ¹è¿ÀÌ´Ù.
¸¶Å©·Î : int FD__SETSIZE
ÀÌ ¸¶Å©·ÎÀÇ °ªÀº fd_set ¿ÀºêÁ§Æ®°¡ ÆÄÀÏ ±â¼úÀÚ¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áú ¼ö ÀÖ´Â ÃÖ´ëÀÇ ¼öÀÌ´Ù. °í Á¤µÈ ÃÖ´ë ¼ö¸¦ °¡Áø ½Ã½ºÅ۵鿡¼´Â, FD_SETSIZE´Â Àû¾îµµ ±× °³¼öÀÌ´Ù. GNU ½Ã½ºÅÛÀ» Æ÷ÇÔÇÑ ´Ù¸¥ ½Ã½ºÅÛ¿¡¼´Â °³¹æÇÏ´Â ±â¼úÀÚÀÇ ¼ö¿¡ ´ëÇÑ Àý´ëÀûÀÎ Á¦ÇÑÀÌ ¾øÁö¸¸, ÀÌ ¸¶Å©·Î´Â fd_setÀÇ ºñ Æ®¿¡ °³¹æÇÏ´Â ±â¼úÀÚÀÇ °³¼ö¸¦ Á¦¾îÇϱâ À§ÇÑ »ó¼ö °ªÀ» °¡Áö°í ÀÖ´Ù.
¸¶Å©·Î : void FD__ZERO (fd_set *set)
ÀÌ ¸¶Å©·Î´Â ÆÄÀÏ ±â¼úÀÚ¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ´Â setÀ» ºó °ø°£ÀÌ µÇµµ·Ï ÃʱâÈÇÑ´Ù.
¸¶Å©·Î : void FD__SET (int filedes, fd_set *set)
ÀÌ ¸¶Å©·Î´Â ÆÄÀÏ ±â¼úÀÚ Á¤º¸¸¦ °®°í ÀÖ´Â set¿¡ ±â¼úÀÚ filedes¸¦ ´õÇÑ´Ù.
¸¶Å©·Î : void FD__CLR (int filedes, fd_set *set)
ÀÌ ¸¶Å©·Î´Â ÆÄÀÏ ±â¼úÀÚ Á¤º¸¸¦ °®°í ÀÖ´Â set¿¡¼ ±â¼úÀÚ filedes¸¦ Á¦°ÅÇÑ´Ù.
¸¶Å©·Î : int FD__ISSET (int filedes, fo_set *set)
ÀÌ ¸¶Å©·Î´Â ¸¸ÀÏ filedes°¡ ÆÄÀÏ ±â¼úÀÚ¿¡ ´ëÇÑ Á¤º¸¸¦ °®°í ÀÖ´Â setÀÇ ¸â¹ö¶ó¸é 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇϰí, ±×·¸Áö ¾ÊÀ¸¸é 0À» ¸®ÅÏ ÇÑ´Ù.
´ÙÀ½Àº select ÇÔ¼ö¿¡ ´ëÇÑ ¼³¸íÀÌ´Ù.
ÇÔ¼ö : int select (int nfds, fd_set *read_fds, fd_set *write_fds, fd_set *except_fds, struct timeval *timeout)
selectÇÔ¼ö´Â Á¤ÇØÁø ÆÄÀÏ ±â¼úÀÚµé Áß¿¡¼ ¾î´À °ÍÀÌ ¾î¶² µ¿ÀÛÀ» Çϰųª, ¼³Á¤µÈ ½Ã°£ÀÌ ³¡³¯ ¶§±î Áö È£ÃâµÈ ÇÁ·Î¼¼½º¸¦ ºí·Ï ½ÃŲ´Ù.
read_fds Àμö¿¡ ÀÇÇØ Á¤ÇØÁø ÆÄÀÏ ±â¼úÀÚµéÀº ±×µéÀÌ Àбâ À§ÇÑ Áغñ°¡ µÇ¾îÀÖ´ÂÁö üũµÇ¾îÁø´Ù; write_fds Àμö·Î Á¤ÇØÁø ÆÄÀÏ ±â¼úÀÚµéÀº ±×µéÀÌ ¾²±â À§ÇÑ Áغñ°¡ µÇ¾ú´ÂÁö üũµÇ¾îÁø´Ù; ±×¸®°í except_fds ·Î Á¤ÇØÁø ÆÄÀÏ ±â¼úÀÚµéÀº ¿¹¿ÜÀû »óȲÀ» À§ÇØ Ã¼Å©µÇ¾îÁø´Ù. ¸¸ÀÏ ´ç½ÅÀÌ À§¿¡ ¼³¸í µÈ »óȲ Áß¿¡ üũÇÏÁö ¾Ê¾Æµµ µÇ´Â °Í¿¡ ´ëÇÑ Àμö´Â ³Î Æ÷ÀÎÅÍ·Î ÁÖ¸é µÈ´Ù. "¿¹¿ÜÀû »óȲ"Àº ÀÌ ¹Ì ½ÇÇàµÇ¾îÁö°í, ÆÄÀÏ ±â¼úÀÚÀÇ »óȲÀ» ±¸¼ºÇÏÁö ¾Ê´Â À߸øµÈ ½Ã½ºÅÛÈ£ÃâÀÌ ÀÖÀ» ¶§ Áï½Ã º¸°íµÇ¾î Áö´Â errors_errors¸¦ ÀǹÌÇÏÁö ¾Ê´Â´Ù. ¿ÀÈ÷·Á, ±×µéÀº ¼ÒÄÏ¿¡ ±ä±ÞÇÑ ¸Þ½ÃÁö°¡ ³ªÅ¸³ ±×·± »óȲÀ»
¸»ÇÑ´Ù. ( 11Àå [Socket] 149 ÆäÀÌÁö¿¡¼ ±ä±ÞÇÑ ¸Þ½ÃÁöµé¿¡ ´ëÇÑ Á¤º¸¸¦ ÂüÁ¶ )
select ÇÔ¼ö´Â ¿ÀÁ÷ ù ¹øÂ° nfds ÆÄÀÏ ±â¼úÀÚ¸¦ üũÇϴµ¥, º¸Åë ÀÌ ÀμöÀÇ °ªÀ¸·Î FD_SETSIZE °¡ ÁÖ¾îÁø´Ù. timeout´Â ±â´Ù¸®±â À§ÇÑ ÃÖ´ëÀÇ ½Ã°£À» Á¤ÇÑ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ÀÌ Àμö·Î ³Î Æ÷ÀÎÅ͸¦ Áشٸé, ÇϳªÀÇ ÆÄÀÏ ±â¼úÀÚ¶óµµ ÁغñµÉ ¶§±îÁö ¹«±âÇÑ ºí·Ï ½ÃÅ´À» ÀǹÌÇÑ´Ù. ±×·¸Áö ¾Ê´Ù¸é, ´ç½Å Àº struct timeval Çü½Ä ¾È¿¡ ½Ã°£ÀÇ °ªÀ» ÁÖ¾î¾ßÇÑ´Ù; 17.2.2.Àý [High Resolution Calendar] 235 Æä ÀÌÁö ÂüÁ¶. ½Ã°£ÀÇ °ªÀ¸·Î 0À» Á¤Çϸé(¸ðµÎ 0ÀÇ °ªÀÎ struct timeval) ÀÌ¹Ì ÁغñµÈ ±â¼úÀÚ¸¦ ã°Å³ª,
¸¸ÀÏ ÁغñµÈ ±â¼úÀÚ°¡ ¾ø´Ù¸é ±â´Ù¸®Áö ¾ÊÀ½À» ÀǹÌÇÑ´Ù.
º¸Åë select ÇÔ¼ö·ÎºÎÅÍÀÇ ¸®ÅÏ °ªÀº set¾È¿¡ ÁöÁ¤µÈ ±â¼úÀÚ Áß¿¡¼ ÁغñµÈ ±â¼úÀÚÀÇ ÃѼöÀÌ´Ù. ÀÎ ¼ö setµéÀÇ °¢°¢Àº ¿¬°üµÈ ¸í·ÉÀ» À§Çؼ ÁغñµÈ ±â¼úÀÚ¿¡ ´ëÇÑ Á¤º¸·Î °»½ÅµÈ´Ù. ¸¸ÀÏ ÀÔ·ÂÀ» °¡Áø Ưº°ÇÑ ±â¼úÀÚ desc¸¦ º¸·Á¸é, select ÇÔ¼ö°¡ ¸®ÅÏÇÑÈÄ¿¡ FD_ISSET (desc, read`fds)¸¦ »ç¿ëÇ϶ó. ¸¸ÀÏ ½Ã°£ ¼³Á¤ °ªÀÌ ³¡³µ´Ù¸é select´Â 0ÀÇ °ªÀ» ¸®ÅÏ ÇÑ´Ù.
¾î´À ½ÅÈ£´Â select°¡ ±â´Ù¸®Áö ¾Ê°í Áï½Ã ¸®ÅÏÇØ¹ö¸®´Â ¿øÀÎÀÌ µÈ´Ù. ±×·¡¼ ¸¸ÀÏ ´ç½ÅÀÇ ÇÁ·Î±×·¥ ÀÌ ½ÅÈ£µéÀ» »ç¿ëÇÑ´Ù¸é, ´ç½ÅÀº select°¡ Á¤ÇØÁø ¿ÏÀüÇÑ ½Ã°£µ¿¾È ±â´Ù¸²À» À¯ÁöÇÑ´Ù°í ½Å·ÚÇÒ ¼ö ¾ø´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ¾î´À Á¤ÇØÁø ½Ã°£µ¿¾È È®½ÇÈ÷ ±â´Ù¸²À» ¿øÇÑ´Ù¸é, ´ç½ÅÀº ¹Ýµå½Ã EINTRÀ» üũ Çϰí ÇöÀçÀÇ ½Ã°£¿¡ ±âÃÊÇÑ »õ·ÎÀÌ ¼³Á¤µÈ ½Ã°£(timeout)À¸·Î select ¸¦ ´Ù½Ã È£ÃâÇ϶ó. ¾Æ·¡¿¡ ÀÖ´Â ¿¹¸¦ º¸¶ó. 21.5Àý [Interrupted Primitives]293ÆäÀÌÁö ÂüÁ¶.
¸¸ÀÏ ¿¡·¯°¡ ¹ß»ýÇϸé, select´Â -1À» ¸®ÅÏÇϰí, ÆÄÀÏ ±â¼úÀÚ ¼Â(sets) Àμö¸¦ °»½ÅÇÏÁö ¾Ê´Â´Ù. ´Ù À½ errno´Â ÀÌ ÇÔ¼ö¿¡¼ Á¤ÀÇÇÑ ¿¡·¯ »óȲÀÌ´Ù.
EBADF
ÆÄÀÏ ±â¼úÀÚÁß¿¡ Çϳª°¡ À¯¿ëÇÏÁö ¾ÊÀº ÆÄÀÏ ±â¼úÀÚÀÌ´Ù.
EINTR
¸í·ÉÀÌ ½ÅÈ£¿¡ ÀÇÇØ ÀÎÅÍ·´Æ® µÇ¾îÁ³´Ù. 21.5Àý [Interrupted Primitives] 293 ÆäÀÌÁö ÂüÁ¶.
EINVAL
timeout Àμö°¡ À¯¿ëÇÏÁö ¾Ê´Ù; ±¸¼º¿ä¼ÒÁß Çϳª°¡ À½ÀÇ °ªÀ̰ųª, ³Ê¹« ±æ´Ù.
À̽ļº ³ëÆ® : select ÇÔ¼ö´Â BSD Unix ¿ëÀÌ´Ù.
¾Æ·¡ÀÇ ¿¹´Â ÆÄÀÏ ±â¼úÀڷκÎÅÍ Àбâ À§ÇØ timeout½Ã°£À» ¼³Á¤ÇÏ°í ¾î¶»°Ô select¸¦ »ç¿ëÇÏ´ÂÁö¿¡ ´ë ÇÑ °ÍÀ» º¸¿©ÁÖ°í ÀÖ´Ù. input_timeoutÇÔ¼ö´Â ÆÄÀÏ ±â¼úÀÚ »ó¿¡ À¯¿ëÇÑ ÀÔ·ÂÀÌ ÀÖÀ» ¶§±îÁö, ¶Ç´Â Á¤ÇØÁø timeout½Ã°£ÀÌ ³¡³¯ ¶§±îÁö È£ÃâÇÑ ÇÁ·Î¼¼½º¸¦ ºí·Ï ½ÃŲ´Ù.
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
int input_timeout (int filedes, unsigned int seconds)
{
fd_set set;
struct timeval timeout;
/* ÆÄÀÏ ±â¼úÀÚ ¼ÂÀ» ÃʱâÈ */ <--- ÀÏ´Ü ÆÄÀÏ ±â¼úÀÚ ¼ÂÀ»°ø¹éÀ¸·Î ÃʱâÈ ÇÑ ´ÙÀ½ filedes±â ¼úÀÚ¸¦ ´õÇ߳׿ä.*/
FD_ZERO (&set);
FD_SET (filedes, &set);
/* timeout µ¥ÀÌÅÍ ±¸Á¶¸¦ ÃʱâÈ */
timeout.tv_sec = seconds;
timeout.tv_usec = 0;
/* select´Â Á¤ÇØÁø ½Ã°£ÀÌ ³¡³ª¸é 0À» ¸®ÅÏÇϰí, ÀÔ·ÂÀÌ ÀÖÀ¸¸é 1À» ¸®ÅÏÇϰí, ¿¡·¯°¡ ¹ß»ýÇϸé -1À» ¸®ÅÏ ÇÑ´Ù. */
return TEMP_FAILURE_RETRY (select (FD_SETSIZE, &set, NULL, NULL,
&timeout));
--> ¼¼ ¹øÂ°, ³× ¹øÂ° Àμö°¡ ³ÎÀ̹ǷΠÀбâ À§ÇÑ ±â¼úÀÚ¿¡¼ Á¤ÇØÁø ½Ã°£µ¿¾È¿¡ ÀÔ·ÂÀÌ ÀÖ´ÂÁö ü Å©Çϰڳ׿ä.
}
int main (void)
{
fprintf (stderr, "select returned %d.\n", input_timeout (STDIN_FILENO, 5));
return 0;
}
´ÙÁß ¼ÒÄÏÀ¸·ÎºÎÅÍ ´ÙÁß ÀÔ·ÂÀ» À§Çؼ´Â select¸¦ ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇÑ ¿¹Á¦´Â 11.8.7Àý [Server Example] 171 ÆäÀÌÁö ÂüÁ¶.
8.7 ÆÄÀÏ¿¡¼ÀÇ Á¦¾î ¸í·Éµé.
ÀÌ ÀýÀº ÆÄÀÏ ±â¼úÀÚ »ó¿¡¼, ÆÄÀÏ ±â¼úÀÚÀÇ »óȲÀ» ³ªÅ¸³»°í ÀÖ´Â Ç÷¡±×¸¦ ¼ÂÆÃÇϰųª, ·¹ÄÚµåÀÇ ¶ô(locks)À» ´Ù·ç´Â °Í°ú °°Àº ´Ù¾çÇÑ ¸í·ÉµéÀ» ¾î¶»°Ô ¼öÇàÇÒ ¼ö ÀÖ´ÂÁö¸¦ ¼³¸íÇϰí ÀÖ´Ù. ÀÌµé ¸í ·ÉµéÀº ¸ðµÎ fcntlÇÔ¼ö¸¦ ÅëÇØ ÀÌ·ç¾îÁø´Ù.
fcntlÇÔ¼öÀÇ µÎ ¹øÂ° Àμö´Â ¼öÇàÇÏ·Á´Â ¸í·ÉÀ¸·Î ÁöÁ¤µÈ ¸í·É¹®ÀÌ´Ù. ±× ÇÔ¼ö¿Í ¸¶Å©·Î¿Í ÇÔ²² »ç ¿ëµÇ´Â ´Ù¾çÇÑ Ç÷¡±×µéÀº Çì´õÆÄÀÏ 'fcntl.h' ¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù. ( À̵é Ç÷¡±×µéÀÇ ´ëºÎºÐÀº openÇÔ ¼ö¿¡¼ »ç¿ëµÇ¾î Áö´ø °ÍÀÌ´Ù; 8.1Àý [Opening and Closing Files] 103ÆäÀÌÁö ÂüÁ¶)
ÇÔ¼ö : int fcntl (int filedes, int command, . . .)
fcntl ÇÔ¼ö´Â ÆÄÀÏ ±â¼úÀÚ filedes »ó¿¡¼ command¿¡ ÀÇÇØ Á¤ÇØÁø ¸í·ÉÀ» ¼öÇàÇÑ´Ù. ¾î¶² commandµéÀº °ø±ÞÇØ¾ßÇÒ ºÎ°¡Àû Àμö¸¦ ÇÊ¿ä·Î ÇÑ´Ù. À̰÷¿¡ °¢°¢ÀÇ ¸í·Éµé¿¡ µû¸¥ ºÎ°¡Àû Àμöµé °ú ¸®ÅÏ °ª°ú ¿¡·¯ »óȲ °¢°¢¿¡ ´ëÇÑ »ó¼¼ÇÑ ¼³¸íÀÌ ÀÖ´Ù.
°£´ÜÈ÷, ¾Æ·¡´Â ´Ù¾çÇÑ ¸í·Éµé¿¡ ´ëÇÑ ¸®½ºÆ®ÀÌ´Ù.
F_DUPFD
ÆÄÀÏ ±â¼úÀÚ¸¦ º¹Á¦Ç϶ó( µ¿ÀÏÇÑ °³¹æµÈ ÆÄÀÏÀ» °¡¸®Å°´Â ´Ù¸¥ ÆÄÀÏ ±â¼úÀÚ¸¦ ¸®ÅÏ ). 8.8Àý [Duplicating Descriptors] 114ÆäÀÌÁö ÂüÁ¶.
F_GETFD
ÆÄÀÏ ±â¼úÀÚ¿Í ¿¬°üµÈ Ç÷¡±×µéÀ» ¾ò¾î¶ó. 8.9Àý [Descriptor Flags] 115 ÆäÀÌÁö ÂüÁ¶.
F_SETFD
ÆÄÀÏ ±â¼úÀÚ¿Í ¿¬°üµÈ Ç÷¡±×µéÀ» ¼³Á¤Ç϶ó. 8.9Àý [Descriptor Flags], 115 ÆäÀÌÁö ÂüÁ¶.
F_GETFL
°³¹æÇÑ ÆÄÀϰú ¿¬°üµÈ Ç÷¡±×µéÀ» ¾ò¾î¶ó. 8.10Àý [File Status Flags] 116ÆäÀÌÁö ÂüÁ¶.
F_SETFL
°³¹æÇÑ ÆÄÀϰú ¿¬°üµÈ Ç÷¡±×µéÀ» ¼³Á¤Ç϶ó. 8.10Àý [File Status Flags] 116 ÆäÀÌÁö ÂüÁ¶.
F_GETLK
ÆÄÀÏ ·ÏÀ» ¾ò¾î¶ó. 8.11Àý [File Locks] 118 ÆäÀÌÁö ÂüÁ¶.
F_SETLK
ÆÄÀÏ ·ÏÀ» ¼³Á¤Çϰųª, Áö¿ö¶ó. 8.11Àý [File Locks], 118 ÆäÀÌÁö ÂüÁ¶.
F_SETLKW
F_SETLK¿Í °°Áö¸¸, ¿ÏÀüÇϱ⠱îÁö ±â´Ù¸°´Ù. 8.11Àý [File Locks] 118 ÆäÀÌÁö ÂüÁ¶.
F_GETOWN
SIGIO ½ÅÈ£µéÀ» ¹Þ±âÀ§Çؼ ÇÁ·Î¼¼½º³ª ÇÁ·Î¼¼½º ±×·ì ¾ÆÀ̵𸦠¾ò¾î¶ó. 8.12Àý [Interrupt Input] 120 ÆäÀÌÁö ÂüÁ¶.
F_SETOWN
SIGIO ½ÅÈ£µéÀ» ¹Þ±âÀ§Çؼ ÇÁ·Î¼¼½º³ª ÇÁ·Î¼¼½º ±×·ì ¾ÆÀ̵𸦠¼³Á¤Ç϶ó. 8.12Àý [Interrupt Input] 120 ÆäÀÌÁö ÂüÁ¶.
8.8 ±â¼úÀÚ º¹Á¦Çϱâ.
´ç½ÅÀº ÆÄÀÏ ±â¼úÀÚ¸¦ º¹Á¦Çϰųª, µ¿ÀÏÇÑ ÆÄÀÏ ±â¼úÀÚ¸¦ ÂüÁ¶Çϱâ À§ÇÑ ´Ù¸¥ ÆÄÀϱâ¼úÀÚ¸¦ ÇÒ´çÇÒ ¼ö ÀÖ´Ù. º¹Á¦ÇÑ ±â¼úÀÚ´Â ÇϳªÀÇ ÆÄÀÏ À§Ä¡¸¦ Á¡À¯Çϰí, ÇϳªÀÇ ÆÄÀÏ »óȲ Ç÷¡±×µéÀº °®´Â´Ù. ( 8.10Àý [File Status Flags] 116 ÆäÀÌÁö ÂüÁ¶.), ±×·¯³ª, ÆÄÀÏ ±â¼úÀÚ Ç÷¡±×´Â ÀÚ½ÅÀÇ °ÍÀ» ¼ÒÀ¯ÇÑ´Ù.( 8.9Àý [Descriptor Flags] 115 ÆäÀÌÁö ÂüÁ¶)
º¹Á¦ÇÑ ÆÄÀÏ ±â¼úÀÚÀÇ ÁÖµÈ »ç¿ëó´Â ÀÔ·ÂÀ̳ª Ãâ·ÂÀÇ ¸®´ÙÀÌ·º¼Ç(redirection)À» Çϱâ À§ÇÑ °ÍÀÌ´Ù: ±×°ÍÀº ƯÁ¤ÇÑ ÆÄÀÏ ±â¼úÀÚ¿¡ ÇØ´çÇÏ´Â ÆÄÀÏÀ̳ª ÆÄÀÌÇÁ¸¦ º¯È½ÃŲ´Ù.
´ç½ÅÀº F_DUPFD ¸í·ÉÀ¸·Î fcntl ÇÔ¼ö¸¦ »ç¿ëÇØ¼ ÀÌ µ¿ÀÛÀ» ¼öÇàÇÒ ¼ö ÀÖÁö¸¸, º¹Á¦ ±â¼úÀÚ¸¦ ¸¸ µé±â À§Çؼ´Â dup¿Í dup2¶ó´Â Æí¸®ÇÑ ÇÔ¼ö°¡ ÀÖ´Ù. fcntl ÇÔ¼ö¿Í Ç÷¡±×µéÀº 'fcntl.h'¿¡ ¼±¾ðµÇ¾î ÀÖ°í, dup¿Í dup2´Â Çì´õÆÄÀÏ 'unistd.h'¿¡ ÀÖ´Ù.
ÇÔ¼ö : int dup (int old)
ÀÌ ÇÔ¼ö´Â ÀÌ¹Ì ÀÖ´Â ±â¼úÀÚ old¸¦ ù ¹øÂ° À¯¿ëÇÑ ÆÄÀϱâ¼úÀÚ ¹øÈ£·Î º¹Á¦ÇÑ´Ù(ù¹øÂ° ¹øÈ£´Â Çö Àç °³¹æµÇÁö ¾Ê¾Ò´Ù.) À̰ÍÀº fcntl(old. F_DUPFD, 0)°ú µ¿ÀÏÇÏ´Ù.
ÇÔ¼ö : int dup2 (int old, int new)
ÀÌ ÇÔ¼ö´Â ±â¼úÀÚ ¹øÈ£ new·Î old ±â¼úÀÚ¸¦ Ä«ÇÇÇÑ´Ù. ¸¸ÀÏ old±â¼úÀÚ°¡ À¯¿ëÇÏÁö ¸øÇÑ ±â¼úÀÚ¶ó ¸é, dup2´Â ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â´Ù; new¸¦ Æó¼èÇÏÁö ¾Ê´Â´Ù. ±×·¸Áö ¾Ê´Ù¸é, new°¡ old·Î ºÎÅÍ º¹Á¦ µÇ±â Àü¿¡ ÀÌ¹Ì Àü¿¡ Á¸ÀçÇϰí ÀÖ´ø ±â¼úÀÚ¶ó¸é, new¸¦ ÀÏ´Ü ¸ÕÀú Æó¼è½ÃÄÑ¾ß ÇÑ´Ù. ¸¸ÀÏ old¿Í new°¡ ¼·Î ´Ù¸¥ ¹øÈ£À̰í, old°¡ À¯¿ëÇÑ ±â¼úÀÚ¶ó¸é, dup2´Â ´ÙÀ½°ú µ¿ÀÏÇÏ´Ù:
close (new);
fcntl (old, F_DUPFD, new)
±×·¸Áö¸¸, dup2´Â À̰ÍÀ» ÀÚµ¿ÀûÀ¸·Î ÇÑ´Ù. new°¡ Æó¼èµÇ¾î ÀÖ°í, ¾ÆÁ÷ old°¡ º¹Á¦µÇÁö ¾Ê¾ÒÀ» ¶§, È£ÃâµÈ dup2Àǵµ Áß¿¡´Â ¾Æ¹«·± °É¸²µ¹ÀÌ ¾ø´Ù.
¸¶Å©·Î : int F__DUPFD
ÀÌ ¸¶Å©·Î´Â ù ¹øÂ° Àμö·Î¼ ÁÖ¾îÁø ÆÄÀÏ ±â¼úÀÚ¸¦ Ä«ÇÇÇϱâÀ§ÇØ , fcntl¿¡°ÔÁÖ´Â ¸í·É¾î Àμö·Î¼ »ç¿ëµÈ´Ù. ÀÌ °æ¿ì È£Ãâ Çü½ÄÀº ´ÙÀ½°ú °°´Ù:
fcntl (old, F_DUPFD, next_filedes)
next_filedes Àμö´Â int ÇüÀ̰í, ¸®Å쵃 ´ÙÀ½¿¡ À¯¿ëÇÑ ±â¼úÀÚ¸¦ Á¤Çϴµ¥ »ç¿ëµÇ°í, ±× ±â¼úÀÚ´Â ÀÌ °ªº¸´Ù Çϳª Å©°Å³ª, °°Àº °ÍÀÌ´Ù. ÀÌ ¸í·ÉÀ» »ç¿ëÇÑ fcntl·Î ºÎÅÍÀÇ ¸®ÅÏ °ªÀº º¸Åë new ÆÄÀÏ ±â ¼úÀÚÀÇ °ªÀÌ´Ù. -1ÀÇ ¸®ÅϰªÀº ¿¡·¯°¡ ¹ß»ýÇßÀ½À» ³ªÅ¸³½´Ù. ´ÙÀ½ÀÇ errono´Â ÀÌ ¸í·ÉÀ» À§ÇÏ¿© Á¤ ÀÇµÈ ¿¡·¯ »óȲÀÌ´Ù.
EBADF
old Àμö°¡ À¯¿ëÇÏÁö ¾Ê´Ù.
EINVAL
next_filedes Àμö°¡ À¯¿ëÇÏÁö ¾Ê´Ù.
EMFILE
´ç½ÅÀÇ ÇÁ·Î±×·¥ÀÌ ÀÌ¹Ì ÃÖ´ëÇÑ »ç¿ëÇϰí Àֱ⠶§¹®¿¡ ´õ ÀÌ»ó À¯¿ëÇÑ ÆÄÀÏ ±â¼úÀÚ°¡ ¾ø´Ù.
ENFILEÀº dup2°¡ ÆÄÀÏÀÇ °³¹æÀ¸·Î new¸¦ ¸¸µå´Â °ÍÀÌ ¾Æ´Ï±â ¶§¹®¿¡ dup2¿¡¼´Â ¹ß»ýÇÒ ¼ö ÀÖ´Â ¿¡·¯Äڵ尡 ¾Æ´Ï´Ù; º¹Á¦ÇÑ ±â¼úÀÚ´Â ENFILEÀÌ ÁöÀûÇÑ Á¦ÇÑÀ» ¹Ì¸® üũÇÏÁö ¾Ê´Â´Ù. EMFILE´Â ÇÑ ÇÁ·Î¼¼½º¿¡¼ »ç¿ëÁßÀÎ º°°³ÀÇ ±â¼úÀÚ ¹øÈ£¿¡ ´ëÇÑ Á¦ÇÑÀ» ÂüÁ¶Çϱ⠶§¹®¿¡ °¡´ÉÇÏ´Ù.
´ÙÀ½ÀÇ ¿¹´Â ¸®´ÙÀÌ·º¼ÇÀ» Çϱâ À§ÇØ dup2¸¦ ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇÑ °ÍÀÌ´Ù. Ưº°È÷, Ç¥ÁØ ½ºÆ® ¸²(stdin ó·³)ÀÇ ¸®´ÙÀÌ·º¼ÇÀº ÀÚ½Ä ÇÁ·Î¼¼½º ¾È¿¡¼ »õ·Î¿î ÇÁ·Î±×·¥À» ¼öÇàÇϱâ À§Çؼ ¼öÇà ÇÔ ¼öµéÀÇ ( 23.5Àý [Executing a File] 327 ÆäÀÌÁö ÂüÁ¶ ) ¼öÇà ÇÔ¼öµéÁß Çϳª¸¦ È£ÃâÇϱâ Àü¿¡ ½©À̳ª ½©°ú °°Àº ÇÁ·Î±×·¥¿¡ ÀÇÇØ ÇàÇØÁø´Ù. »õ·Î¿î ÇÁ·Î±×·¥ÀÌ ¼öÇàµÇ¾îÁú ¶§, ±× ÇÁ·Î±×·¥ÀÇ ¸ÞÀÎ ÇÔ¼ö °¡ ¼öÇàµÇ±â Àü¿¡ ¿¬°üµÈ ÆÄÀÏ ±â¼úÀÚµéÀ» °¡¸®Å°´Â Ç¥ÁØ ½ºÆ®¸²À» ÃʱâÈÇÑ´Ù.
±×·¡¼ ÆÄÀϷΠǥÁØ ÀÔ·ÂÀ» ¸®´ÙÀÌ·ºÆ® ÇÏ´Â °ÍÀº ½©ÀÌ ´ÙÀ½°ú °°Àº ¾î¶² °ÍÀ» ÇÏ´Â °ÍÀÌ´Ù.
pid = fork ();
if (pid == 0)
{
char *filename;
char *program;
int file;
. . .
file = TEMP_FAILURE_RETRY (open (filename, O_RDONLY));
dup2 (file, STDIN_FILENO);
TEMP_FAILURE_RETRY (close (file));
execv (program, NULL);
}
24.6.3Àý [Launching Jobs] 340 ÆäÀÌÁö¿¡ ÇÁ·Î¼¼½ºÀÇ ÆÄÀÌÇÁ¶óÀο¡ ¾î¶»°Ô ¸®´Ù¸®·º¼ÇÀ» ÇÏ´ÂÁö¿¡ ´ëÇÑ »ó¼¼ÇÑ ¸¹Àº ¿¹Á¦°¡ ÀÖ´Ù.
8.9 ÆÄÀÏ ±â¼úÀÚ Ç÷¡±×
ÆÄÀÏ ±â¼úÀÚ Ç÷¡±×´Â ÆÄÀÏ ±â¼úÀÚÀÇ Àâ´ÙÇÑ ¼Ó¼ºµéÀÌ´Ù. ÀÌ Ç÷¡±×µéÀº Ưº°ÇÑ ÆÄÀÏ ±â¼úÀÚ¿Í ¿¬ °üµÇ¾î Àֱ⠶§¹®¿¡, ¸¸ÀÏ ´ç½ÅÀÌ ÇÑ ¹ø °³¹æÇÑ ÆÄÀϷκÎÅÍ º¹Á¦Çؼ ÆÄÀÏ ±â¼úÀÚ¸¦ ¸¸µé¾ú´Ù¸é, °¢ ±â¼úÀÚ´Â ÀÚ½ÅÀÇ Ç÷¡±× ¼Â(set)À» °®´Â´Ù.
ÇöÀç ´ÜÁö ÇϳªÀÇ ÆÄÀÏ ±â¼úÀÚ Ç÷¡±×°¡ ÀÖ´Ù: FD_CLOEXEC, À̰ÍÀº ¸¸ÀÏ ´ç½ÅÀÌ exec. . . ÇÔ¼ö (23.5Àý [Executing a File], 327 ÆäÀÌÁö)µé Áß ¾î´À Çϳª¸¦ »ç¿ëÇÑ´Ù¸é ±â¼úÀÚ°¡ ´ÝÈ÷°Ô µÇ´Â °á°ú¸¦ °¡Á®¿Â´Ù.
ÀÌ Àý¿¡¼ ¼³¸íÇϰí ÀÖ´Â °ÍÀº Çì´õÆÄÀÏ 'fcntl.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.
¸ÅÅ©·Î : int F__GETFD
ÀÌ ¸ÅÅ©·Î´Â fcntlÀÇ command Àμö·Î »ç¿ëµÇ¾î, filedes Àμö¿Í ¿¬°üµÈ ÆÄÀÏ ±â¼úÀÚ Ç÷¡±×¸¦ ¸®ÅÏ Çϵµ·Ï ÇÑ´Ù. ÀÌ ¸í·ÉÀ» »ç¿ëÇÑ fcntlÀÇ ¸®ÅϰªÀº º¸Åë À½ÀÌ ¾Æ´Ñ ¼ö·Î½á, °¢°¢ÀÇ Ç÷¡±×( ÇöÀç ±×°÷ ¿¡¼ »ç¿ëÇϱâ À§ÇÑ ¿ÀÁ÷ ÇϳªÀÇ Ç÷¡±×¸¦ Á¦¿ÜÇϰí)µéÀ» ºñÆ®º° OR ¿¬»êÀ» ÅëÇØ ÇØ¼® °¡´ÉÇϵµ·Ï ÃßÃâµÈ °ªÀÌ´Ù. ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì¿¡, fcntlÀº -1À» ¸®ÅÏÇÑ´Ù.
´ÙÀ½ errno´Â ÀÌ ¸í·É¿¡¼ Á¤ÀÇÇÑ ¿¡·¯ÀÇ »óȲÀÌ´Ù.
EBADF
filedesÀμö°¡ À¯¿ëÇÏÁö ¾Ê´Ù.
¸ÅÅ©·Î : int F__SETFD
ÀÌ ¸ÅÅ©·Î´Â filedes Àμö¿Í ¿¬°üµÈ ÆÄÀÏ ±â¼úÀÚ Ç÷¡±×µéÀ» ¼³Á¤ÇÔÀ» Áö½ÃÇϱâ À§ÇØ fcntlÇÔ¼öÀÇ commandÀμö·Î »ç¿ëµÇ¾îÁø´Ù. À̰ÍÀº »õ·Î¿î Ç÷¡±×µéÀ» Á¤Çϱâ À§Çؼ ¼¼ ¹øÂ° int Çü Àμö°¡ ÇÊ ¿äÇϹǷÎ, ´ÙÀ½°ú °°Àº Çü½ÄÀ¸·Î È£ÃâÇÑ´Ù:
fcntl (filedes, F_SETFD, new_flags)
ÀÌ ¸í·É°ú ÇÔ²² »ç¿ëµÈ fcntl·Î ºÎÅÍÀÇ ¸®ÅϰªÀº º¸Åë Á¤ÀǵǾîÀÖÁö ¾ÊÁö¸¸, ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì¿¡´Â -1À» ¸®ÅÏÇÏ¿© ¿¡·¯ÀÓÀ» ÁöÀûÇÑ´Ù. Ç÷¡±×µé°ú ¿¡·¯¹ß»ý »óȲÀº F_GETFD ¸í·É°ú °°´Ù.
´ÙÀ½ ¸ÅÅ©·Î´Â fcntlÇÔ¼ö¿Í ÇÔ²² ÆÄÀÏ ±â¼úÀÚ Ç÷¡±×·Î½á »ç¿ëÇϱâ À§ÇØ Á¤ÀǵǾú´Ù. ÀÌ °ªÀº ºñÆ® ¸¶½ºÅ© °ªÀ¸·Î½á »ç¿ëÇÒ¼ö ÀÖ´Â Á¤¼ö »ó¼ö °ªÀÌ´Ù.
¸ÅÅ©·Î : int FD__CLOEXEC
ÀÌ Ç÷¡±×´Â exec ÇÔ¼ö°¡ ºÒ¸®¿öÁú ¶§ ´ÝÇôÁú ÆÄÀÏ ±â¼úÀÚ¸¦ Á¤ÇÑ´Ù; 23.5Àý [Executing a File] 327 ÆäÀÌÁö¸¦ ÂüÁ¶Ç϶ó. ÆÄÀÏ ±â¼úÀÚ°¡ ÇÒ´ç µÇ¾úÀ» ¶§( openÀ̳ª dup¸¦ ÅëÇØ¼), ÀÌ ºñÆ®°¡ »õ·Î ¿î ÆÄÀÏ ±â¼úÀÚ»ó¿¡¼ Ŭ¸®¾îµÇ¸é ´Ù¸¥ »õ·Î¿î ÇÁ·Î±×·¥¿¡¼ ±× ±â¼úÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
¸¸ÀÏ ´ç½ÅÀÌ ÆÄÀÏ ±â¼úÀÚ Ç÷¡±×µéÀ» °»½ÅÇϱ⠿øÇÑ´Ù¸é, ´ç½ÅÀº F_GETFD¸¦ ÅëÇØ¼ ÇöÀçÀÇ Ç÷¡ ±×µéÀº ¾ò°í, ±× °ªÀ» °»½ÅÇ϶ó. À̰÷¿¡¼ º¸¿©ÁØ Ç÷¡±×µéÀÌ °¢°¢ÀÇ Ç÷¡±× Çϳª¸¸ »ç¿ëµÈ´Ù°í »ý°¢ ÇÏÁö ¸»¶ó; ´ç½ÅÀÇ ÇÁ·Î±×·¥Àº Áö±ÝÀ¸·ÎºÎÅÍ ¼ö³â°£ ½ÇÇàµÇ¾îÁú °ÍÀÌ°í ±×·¯¸é ´õ ¸¹Àº Ç÷¡±×µéÀÌ Á¸ÀçÇÏ°Ô µÉ °ÍÀÌ´Ù. ¿¹¸¦ µé¾î, À̰÷¿¡ ÀÖ´Â ÇÔ¼ö´Â ´Ù¸¥ Ç÷¡±×µéÀ» º¯°æÇÏÁö ¾Ê°í FD_CLOEXEC Ç÷¡±×¸¸ Ŭ¸®¾î Çϰųª ¼³Á¤ÇÏ´Â ÇÔ¼öÀÌ´Ù.
/* ¸¸ÀÏ value°¡ 0ÀÌ ¾Æ´Ñ °ªÀ̸é descÀÇ FD_CLOEXEC Ç÷¡±×¸¦
¼³Á¤Çϰí, value°¡ 0À̸é Ŭ¸®¾î Ç϶ó. ¼º°øÇϸé 0À», ½ÇÆÐÇϸé -1À» ¸®ÅÏÇÑ´Ù.
*/
int
set_cloexec_flag (int desc, int value)
{
int oldflags = fcntl (desc, F_GETFD, 0);
/* ¸¸ÀÏ Ç÷¡±×¸¦ Àд °ÍÀÌ ½ÇÆÐÇϸé, ¿¡·¯ÀÓÀ» ÁöÀûÇ϶ó. */
if (oldflags < 0)
return oldflags;
/* ¿ì¸®°¡ ¿øÇÏ´Â °ªÀ¸·Î Ç÷¡±×¸¦ ¼³Á¤Ç϶ó. */
if (value != 0)
oldflags |= FD_CLOEXEC;
else
oldflags &= ~FD_CLOEXEC;
/* ±â¼úÀÚ¿¡ °»½ÅµÈ Ç÷¡±× ¿öµå¸¦ ÀúÀåÇ϶ó */
return fcntl (desc, F_SETFD, oldflags);
}
8.10 ÆÄÀÏ »óȲ Ç÷¡±×µé.
ÆÄÀÏ »óȲ Ç÷¡±×µéÀº °³¹æÇÑ ÆÄÀÏÀÇ ¼Ó¼ºÀ» Á¤Çϱâ À§ÇØ »ç¿ëµÇ¾îÁø´Ù. 8.9Àý [Descriptor Flags] 115 ÆäÀÌÁö ¿¡¼ ³íÀÇµÈ ÆÄÀÏ ±â¼úÀÚ Ç÷¡±×µé°ú ´Þ¸®, ÆÄÀÏ »óȲ Ç÷¡±×µéÀº °³¹æµÈ ÆÄÀϷκÎÅÍ º¹ Á¦µÈ ÆÄÀÏ ±â¼úÀÚ¿¡ ÀÇÇØ °øÀ¯µÇ¾îÁø´Ù.
ÆÄÀÏ »óȲ Ç÷¡±×µéÀº open ÇÔ¼öÀÇ flagsÀμö¸¦ ÅëÇØ ÃʱâÈ µÇ¾îÁø´Ù. Ç÷¡±×Áß ¾î¶² °ÍÀº °³¹æÇÒ ¶§¸¸ Àǹ̰¡ ÀÖ°í °è¼ÓÇØ¼ ±â¾ïµÇÁö ¾Ê´Â´Ù; ³ª¸ÓÁö ´ë´ëºÐÀº ±×ÈÄ¿¡ º¯ÈµÇÁö ¾Ê¾Æ¼, ´ç½ÅÀº ÆÄ ÀÏ »óȲ Ç÷¡±×µéÀ» ½ÃÇèÇÔÀ¸·Î ÀÎÇØ¼ ±×µéÀÇ °ªÀ» ÀÐÀ» ¼ö ÀÖ´Ù. ¸î¸î ÆÄÀÏ »óȲ Ç÷¡±×µéÀº fcntl ÇÔ¼ö¸¦ »ç¿ëÇØ¼ º¯È½Ãų¼ö ÀÖ´Ù. ±×µé¿¡ O_APPEND ¿Í O_NONBLOCK °¡ Æ÷ÇԵȴÙ. ÀÌ Àý¿¡ ÀÖ ´Â ½Éº¼µéÀº Çì´õÆÄÀÏ 'fcntl.h'¿¡ ÀÖ´Ù.
¸ÅÅ©·Î : int F__GETFL
ÀÌ ¸ÅÅ©·Î´Â ±â¼úÀÚ filedes·Î °³¹æÇÑ ÆÄÀÏÀÇ ÆÄÀÏ »óȲ Ç÷¡±×µéÀº ÀбâÀ§ÇØ fcntlÇÔ¼öÀÇ command Àμö·Î½á »ç¿ëµÈ´Ù. ÀÌ ¸í·É°ú ÇÔ²² »ç¿ëµÈ fcntlÀ» ÅëÇÑ ¸®ÅϰªÀº º¸Åë °¢°¢ÀÇ Ç÷¡±×µéÀ» ºñÆ®º° OR¿¬»êÀ» ÅëÇØ¼ ÇØ¼®°¡´ÉÇÑ °ªÀ¸·Î ÃßÃâµÈ À½ÀÌ ¾Æ´Ñ °ªÀÌ´Ù. ±× Ç÷¡±×µéÀº open(8.1Àý [Opening and Closing Files], 103 ÆäÀÌÁö ÂüÁ¶) ÇÔ¼öÀÇ flags Àμöó·³ ºÎÈ£È µÇ¾úÁö¸¸, ¿ÀÁ÷ ÆÄÀÏ °Ë»ö ¸ðµå ¿Í O_APPEND ¿Í O_NONBLOCK Ç÷¡±×µé¸¸ À̰÷¿¡¼ Àǹ̰¡ ÀÖ´Ù. ÆÄÀÏ ¾ï¼¼½º ¸ðµåµéÀÌ ´ÜÀÏ ÇÑ-ºñÆ® °ªµéÀÌ ¾Æ´Ï±â ¶§¹®¿¡, ´ç½ÅÀº ±×µé°ú ºñ±³Çϱâ À§Çؼ O_ACCMODEÀ» »ç¿ëÇÏ¿© ¸®ÅÏµÈ Ç÷¡±×µé¿¡¼ ´Ù¸¥ ºñÆ®µéÀ» ¸¶½ºÅ© ½ÃÄѼ ¿øÇÏ´Â ºñÆ®¸¦ ÃßÃâÇÒ ¼ö ÀÖ´Ù.
¿¡·¯°¡ ¹ß»ýÇϸé fcntlÀº -1À» ¸®ÅÏÇÑ´Ù. ´ÙÀ½ÀÇ errno´Â ÀÌ ¸í·É¿¡¼ Á¤ÀÇÇÑ ¿¡·¯»óȲÀÌ´Ù.
EBADF
filedes Àμö°¡ ºÎÀûÇÕÇÏ´Ù.
¸ÅÅ©·Î : int F__SETFL
ÀÌ ¸ÅÅ©·Î´Â filedes Àμö¿Í ¿¬°üµÈ °³¹æÆÄÀÏÀÇ ÆÄÀÏ »óȲ Ç÷¡±×¸¦ ¼³Á¤Çϱâ À§Çؼ, fcntl ¿¡¼ command Àμö·Î½á »ç¿ëµÇ¾îÁø´Ù. ÀÌ ¸í·ÉÀº »õ·Î¿î Ç÷¡±×¸¦ ¼³Á¤Çϱâ À§Çؼ ¼¼ ¹øÂ°¿¡ int Çü ÀÎ ¼ö¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ±×·¡¼ À̰ÍÀº ´ÙÀ½Ã³·³ È£ÃâÇÑ´Ù:
fcntl (filedes, F_SETFL, new_flags)
´ç½ÅÀº ÀÌ ¹æ¹ýÀ¸·Î ÆÄÀÏ ¿¢¼¼½º ¸ðµå¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù; Àаųª ¾²±âÀ§ÇØ °³¹æµÇ¾îÁø ÆÄÀÏ ±â¼úÀÚ µçÁö °£¿¡. ´ç½ÅÀº ¿ÀÁ÷ O_APPEND¿Í O_NONBLOCK Ç÷¡±×µéÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. ÀÌ ¸í·ÉÀ» »ç ¿ëÇÑ fcntl·ÎºÎÅÍ ¸®ÅÏµÈ °ªÀº ÁöÁ¤µÈ °ªÀÌ ¾Æ´ÏÁö¸¸, ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì¿¡ -1À» ¸®ÅÏÇÑ´Ù. ¿¡·¯ÀÇ ¹ß»ý »óȲÀº F_GETFL ¸í·É°ú °°´Ù.
´ÙÀ½ ¸ÅÅ©·ÎµéÀº ÆÄÀÏ »óȲ Ç÷¡±× °ªµéÀ» ºÐ¼®ÇÏ°í ±¸¼ºÇϱâ À§ÇØ Á¤ÀǵǾîÁ³´Ù.
O_APPEND
ÆÄÀÏ µ¡ºÙÀ̱Ⱑ °¡´ÉÇÑ ¸ðµå·Î ¸¸µé±â À§ÇÑ ºñÆ®ÀÌ´Ù. ¸¸ÀÏ ÀÌ ºñÆ®°¡ ¼³Á¤µÇ¸é, ¸ðµç ¾²±â (write) ¸í·ÉµéÀº ÆÄÀÏÀÇ ³¡¿¡¼ ¾²±â°¡ ÀÌ·ç¾îÁö°í, ÇöÀç ÆÄÀÏÀÇ À§Ä¡°¡ ¹«½ÃµÈ´Ù.
O_NONBLOCK
ÆÄÀÏÀ» ºñºí·ÏÈ ¸ðµå·Î ¸¸µé±â À§ÇÑ ºñÆ®ÀÌ´Ù. ¸¸ÀÏ ÀÌ ºñÆ®°¡ ¼³Á¤µÇ¸é, ÆÄÀÏ¿¡¼ Àбâ(read) ¿äûÀº Áï½Ã À¯¿ëÇÑ ÀÔ·ÂÀÌ ¾ø´Ù¸é ±â´Ù¸®Áö ¾Ê°í Áï½Ã ¸®ÅÏÇÑ´Ù. ¸¶Âù°¡Áö·Î, ¾²±â(write) ¿äû ¶Ç ÇÑ Áï½Ã ¾²±â °¡´ÉÇÑ Ãâ·ÂÀÌ ¾ø´Ù¸é Áï½Ã ¸®ÅÏÇÏ¿© ¾²±â ¿äûÀº ½ÇÆÐÇÑ´Ù.
O_NDELAY
À̰ÍÀº O_NONBLOCKÀÇ À¯»ç¾î·Î½á, BSD¿ÍÀÇ È£È¯¼ºÀ» À§ÇØ Á¦°øµÈ´Ù.
¸ÅÅ©·Î : int O__ACCMODE
ÀÌ ¸ÅÅ©·Î´Â ÆÄÀÏ °Ë»ö¸ðµå¸¦ ³ªÅ¸³»´Â °ªÀ» ¾Ë¾Æ³»±â À§ÇØ ÆÄÀÏ »óȲÇ÷¡±×¿Í ºñÆ®º° AND¸¦ ½Ã Ű´Â ¸¶½ºÅ©ÀÌ´Ù. ¸ðµå¿¡´Â O_RDONLY, O_WRONLY, ¶Ç O_RDWRÀÌ ÀÖ´Ù.
O_RDONLY Àб⠸ðµå·Î ÆÄÀÏÀ» °³¹æ.
O_WRONLY ¾²±â ¸ðµå·Î ÆÄÀÏÀ» °³¹æ.
O_RDWR Àб⠾²±â ¸ðµÎ °¡´ÉÇÏ°Ô ÆÄÀÏÀ» °³¹æ.
¸¸ÀÏ ´ç½ÅÀÌ ÆÄÀÏ »óȲ Ç÷¡±×¸¦ °»½ÅÇϱ⠿øÇÑ´Ù¸é, ´ç½ÅÀº F_GETFLÀ» »ç¿ëÇØ¼ ÇöÀçÀÇ Ç÷¡±×µé Àº ¾ò¾î¼ ±× °ªÀ» °»½ÅÇ϶ó. À̰÷¿¡¼ º¸¿©ÁØ Ç÷¡±×µéÀÌ ¿ÀÁ÷ ´Üµ¶À¸·Î Á¸ÀçÇÑ´Ù°í °¡Á¤ÇÏÁö ¸» ¾Æ¶ó; ´ç½ÅÀÇ ÇÁ·Î±×·¥Àº Áö±ÝºÎÅÍ ¼ö³â°£ ½ÇÇàµÇ¾îÁú°ÍÀÌ°í ±×·¯¸é ´õ ¸¹Àº Ç÷¡±×µéÀº Á¸ÀçÇÒ °Í ÀÌ´Ù. ¿¹¸¦ µé¾î, À̰÷¿¡ ´Ù¸¥ Ç÷¡±×µéÀ» º¯°æÇÔÀÌ ¾øÀÌ ¿ÀÁ÷ O_NONBLOCK Ç÷¡±×¸¸ ¼³Á¤Çϰí, Ŭ¸®¾îÇÏ´Â ÇÔ¼ö°¡ ÀÖ´Ù.
/* ¸¸ÀÏ value °ªÀÌ 0ÀÌ ¾Æ´Ñ°ªÀ̸é descÀÇ O_NONBLOCK Ç÷¡±×¸¦ ¼³Á¤Çϰí, valueÀÇ °ªÀÌ 0ÀÌ ¸é ±× Ç÷¡±×¸¦ Ŭ¸®¾îÇ϶ó. ¼º°øÇϸé 0À» ¸®ÅÏÇϰí, ¿¡·¯°¡ ¹ß»ýÇϸé -1À» ¸®ÅÏÇ϶ó */
int
set_nonblock_flag (int desc, int value)
{
int oldflags = fcntl (desc, F_GETFL, 0);
/* ¸¸ÀÏ Àбâ Ç÷¡±×µéÀÌ ½ÇÆÐÇϸé, Áï½Ã ¿¡·¯ÀÓÀ» ÁöÀûÇ϶ó. */
if (oldflags < 0)
return oldflags;
/* ¿ì¸®°¡ ¿øÇÏ´Â Ç÷¡±×¸¦ ¼³Á¤Ç϶ó */
if (value != 0)
oldflags |= O_NONBLOCK;
else
oldflags &= ~O_NONBLOCK;
/* ±â¼úÀÚ¿¡ °»½ÅµÈ Ç÷¡±× ¿öµå¸¦ ÀúÀåÇ϶ó */
return fcntl (desc, F_SETFL, oldflags);
}
8.11 ÆÄÀÏ ·Ï.
À§¿¡¼ ¼³¸íÇÑ °Í ¿Ü¿¡ fcntl ¿¡¼ ¾µ ¼ö ÀÖ´Â ¸í·ÉÀº ·¹ÄÚµå ¶ôÅ·(locking)À» Áö¿øÇϱâ À§ÇØ »ç¿ë µÇ¾îÁø´Ù. ·¹ÄÚµå ¶ôÅ·Àº ´ÙÁß »ç¿ëÀÚ ÇÁ·Î±×·¥¿¡¼ µ¿½Ã¿¡ ÆÄÀÏÀÇ °°Àº ºÎºÐÀ» ¾ï¼¼½ºÇÏ´Â °ÍÀ» ¹æ ÁöÇϱâ À§ÇÑ °ÍÀÌ´Ù.
¹èŸÀûÀ̰ųª ¾²±â(write) ¶ô(lock)Àº ÇÁ·Î¼¼½º°¡ ÆÄÀÏÀÇ ÁöÁ¤ÇÑ ºÎºÐ¿¡¼ ¹èŸÀûÀÎ µ¿ÀÛÀ¸·Î ¾²±â À§Çؼ ÁÖ¾îÁø´Ù. ¾²±â ¶ôÀÌ ÀÖ´Â °÷¿¡¼´Â ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀº ÆÄÀÏÀÇ ±×ºÎºÐ¿¡ ¶ôÀ» °É ¼ö°¡ ¾ø´Ù.
ºÐ¹èÇϰųª Àбâ(read) ¶ô(lock)Àº ÆÄÀÏÀÇ ÁöÁ¤µÈ ºÎºÐÀ» Àаí ÀÖÀ» ¶§ ´Ù¸¥ ÇÁ·Î¼¼½º·Î ºÎÅÍÀÇ ¾² ±â ¶ô(write lock) ¿äûÀ» °ÅºÎÇÑ´Ù. ±×·¸Áö¸¸ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ Àб⠶ô(read lock)À» ¿äûÇÏ´Â °ÍÀº °¡´ÉÇÏ´Ù.
read¿Í write ÇÔ¼öµéÀº ½ÇÁ¦·Î ±× À§Ä¡¿¡ ¶ô(lock)ÀÌ °É¸°°ÇÁö¸¦ üũÇÏÁö ¾Ê´Â´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ´Ù Áß ÇÁ·Î¼¼½º¿¡ ÀÇÇØ Á¡À¯µÈ ÆÄÀÏÀ» À§ÇØ ¶ôÅ·(locking) ÇÁ·ÎÅäÄÝ(protocol)À» »ç¿ëÇϱ⠿øÇÑ´Ù¸é, ´ç ½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀº Àû´çÇÑ ÁöÁ¡¿¡¼ ¶ô(lock)À» ¿äûÇϰųª Ŭ¸®¾î Çϱâ À§Çؼ fcntl ÇÔ¼ö¸¦ È£Ãâ ÇØ¾ß¸¸ ÇÑ´Ù.
¶ôµéÀº ÇÁ·Î¼¼½ºµé°ú ¿¬°üµÇ¾î ÀÖ´Ù. ÇÑ ÇÁ·Î¼¼½º´Â ÁÖ¾îÁø ÆÄÀÏÀÇ °¢ ¹ÙÀÌÆ®¿¡ ÇÑÁ¾·ù¸¸ÀÇ ¶ô (lock) ¼³Á¤À» ÇÒ ¼ö ÀÖ´Ù. ÆÄÀϱâ¼úÀÚ°¡ ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ´ÝÇôÁú ¶§, ±× ÆÄÀÏ¿¡¼ ÇÁ·Î¼¼½º°¡ °®°í
ÀÖ´ø ¸ðµç ¶ôµéÀº ÇØÁ¦µÈ´Ù, ½ÉÁö¾î ÇöÀç °³¹æ »óÅÂÀÎ ´Ù¸¥ ±â¼úÀÚ¸¦ »ç¿ëÇØ¼ ¸¸µé¾îÁø ¶ôÀÏÁö¶ó µµ... ¸¶Âù°¡Áö·Î, ÇÁ·Î¼¼½º°¡ Á¸ÀçÇϰí ÀÖÀ» ¶§ ÇØÁ¦µÈ ¶ôµéÀº, fork(23.4Àý [Creating a Process], 326ÆäÀÌÁö ÂüÁ¶)¸¦ »ç¿ëÇØ¼ ¸¸µé¾îÁø ÀÚ½Ä ÇÁ·Î¼¼½º¿¡°Ô ¹°·ÁÁÙ ¼ö ¾ø´Ù.
¶ôÀ» ¸¸µé ¶§, ¶ôÀÌ ¾î¶² Á¾·ùÀ̰í ÇöÀç ¾îµð¿¡ ÀÖ´ÂÁö¸¦ ¾Ë¸®±â À§ÇØ ±¸Á¶Ã¼ struct flock¸¦ »ç¿ë ÇÑ´Ù. ÀÌ µ¥ÀÌÅÍ Å¸ÀÔ°ú fcntl°ú ¿¬°üµÈ ¸ÅÅ©·Î´Â Çì´õÆÄÀÏ 'fcntl.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
µ¥ÀÌÅÍŸÀÔ : struct flock
ÀÌ ±¸Á¶Ã¼´Â ÆÄÀÏ ¶ôÀ» ¼³¸íÇϱâ À§ÇØ fcntl ÇÔ¼ö¿¡¼ »ç¿ëµÇ¾îÁø´Ù. ÀÌµé ¸â¹ö´Â ´ÙÀ½°ú °°´Ù:
short int l_type
¶ôÀÇ Å¸ÀÔÀ» Á¤ÇÑ´Ù; F_RDLCK, FWRLCK, ¶Ç´Â F_UNLCK Áß¿¡ Çϳª.
short int l_whence
À̰ÍÀº fseek ³ª lseek ÇÔ¼öÀÇ ÀμöÀÎ whence ¿Í ÀÏÄ¡Çϰí, ±×°ÍÀ» ±âÁ¡À¸·Î offsetÀ» Á¤ÇÑ´Ù. SEEK_SET, SEEK_CUR, SEEK_END Áß Çϳª.
off_t l_start
À̰ÍÀº ¶ôÀÌ Àû¿ëµÇ´Â Áö¿ªÀÇ ½ÃÀÛ offsetÀ» ÁöÁ¤Çϰí, l_whence ¸â¹ö¿¡ ¿¬°üÇÑ ÁöÁ¡ÀÌ ¹ÙÀÌÆ®·Î ÁÖ ¾îÁø´Ù.
off_t l_len
À̰ÍÀº ¶ôÀÌ ¼³Á¤µÈ Áö¿ªÀÇ ±æÀ̸¦ ÁöÁ¤ÇÑ´Ù. 0ÀÇ °ªÀº Ưº°È÷ Ãë±ÞµÈ´Ù; ±×°ÍÀº ÆÄÀÏÀÇ ³¡¿¡¼ ¶ôÀÇ ¹üÀ§¸¦ È®ÀåÇÏ´Â°É ÀǹÌÇÑ´Ù.
pid_t l_pid
ÀÌ Çʵå´Â ¶ôÀ» °®°í ÀÖ´Â ÇÁ·Î¼¼½ºÀÇ ÇÁ·Î¼¼½º ID (23.2Àý [Process Creation Concepts], 325 ÆäÀÌ Áö ÂüÁ¶)ÀÌ´Ù. F_GETLK ¸í·ÉÀ» »ç¿ëÇØ¼ fcntl ÇÔ¼ö¸¦ È£ÃâÇϸé ÀÌ Çʵ尡 ä¿öÁöÁö¸¸, ¶ôÀ» ¸¸µé ¶§´Â ¹«½ÃµÈ´Ù.
¸ÅÅ©·Î : int F__GETLK
ÀÌ ¸ÅÅ©·Î´Â ¶ô¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò°íÀÚ ÇÔÀ» ¾Ë¸®±â À§ÇØ, fcntl¿¡°Ô command Àμö·Î½á »ç¿ëµÈ´Ù. ÀÌ ¸í·ÉÀº fcntl¿¡°Ô ÁÖ±âÀ§ÇØ struct flock * ŸÀÔÀÇ »õ¹øÂ° Àμö°¡ ÇÊ¿äÇÏ´Ù. ±×·¡¼ ´ÙÀ½°ú °°Àº Çü½ÄÀ¸·Î È£ÃâÇÑ´Ù:
fcntl (filedes, F_GETLK, lockp)
¸¸ÀÏ lockp Àμö¿¡ ÀÇÇØ ¹¦»çµÈ ¶ôÀÌ ¼³Á¤µÈ ºí·ÏÀÇ ¿µ¿ª¿¡ ÀÌ¹Ì ¶ôÀÌ Á¸ÀçÇÑ´Ù¸é, ±× ¶ô¿¡ ´ëÇÑ Á¤º¸´Â *lockp¿¡ ´Ù½Ã ¾²¿©Áø´Ù. ÀÌ¹Ì Á¸ÀçÇϰí ÀÖ´Â ¶ôÀÌ »õ·Î ¸¸µé°í ÀÖ´Â ¶ô°ú ȣȯ¼ºÀÌ ÀÖ´Ù¸é º¸°íµÇÁö ¾Ê´Â´Ù. ±×·¡¼, ¸¸ÀÏ ´ç½ÅÀÌ Àбâ¿Í ¾²±â ¶ôµé¿¡ ´ëÇØ¼ ã±â¸¦ ¿øÇÑ´Ù¸é F_WRLKÀÇ Å¸ ÀÔÀ¸·Î ¶ôÀ» ÁöÁ¤Çϰųª, ¸¸ÀÏ ´ç½ÅÀÌ ¾²±â ¶ô¿¡ ´ëÇÑ °ÍÀ» ã°í ½Í´Ù¸é F_RDLCKÀÇ Å¸ÀÔÀ¸·Î ¶ôÀ» ÁöÁ¤ÇØ¾ß ÇÑ´Ù.
lockp Àμö¿¡ ÀÇÇØ ÁöÁ¤µÈ Áö¿ª¿¡´Â ÇÑ °³º¸´Ù ´õ ¸¹Àº ¶ôµéÀÌ ÀÖ°ÚÁö¸¸, fcntlÀº ¿ÀÁ÷ ±×µéÁß Çϳª ¿¡ ´ëÇÑ Á¤º¸¸¦ ¸®ÅÏÇÑ´Ù. lockp ±¸Á¶Ã¼Áß l_whence ¸â¹ö´Â SEEK_SETÀ¸·Î ¼³Á¤µÇ°í l_start ¿Í l_len ÇʵåµéÀº ¶ôÀÌ °É¸° Áö¿ª°ú µ¿ÀÏÇÏ°Ô ¼³Á¤µÈ´Ù. ¸¸ÀÏ ¾Æ¹«°Íµµ ¶ôÀÌ °É¸®Áö ¾Ê¾Ò´Ù¸é, lockp ±¸Á¶Ã¼¿¡ À¯ÀÏÇÏ°Ô °¡ÇØÁö´Â º¯È´Â F_UNLCKÀÇ °ªÀ¸·Î l_typeÀÌ °»½ÅµÇ´Â °ÍÀÌ´Ù.
ÀÌ ¸í·ÉÀ» »ç¿ëÇÑ fcntl ·ÎºÎÅÍÀÇ ¸®ÅϰªÀº º¸Åë Á¤ÇØÁöÁö ¾Ê¾Ò°í, ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì¿¡´Â -1À» ¸® ÅÏÇÑ´Ù. ´ÙÀ½ errno´Â ÀÌ ¸í·É¿¡¼ Á¤ÀÇÇÑ ¿¡·¯»óȲÀÌ´Ù.
EBADF
filedes Àμö°¡ À¯¿ëÇÏÁö ¾Ê´Ù.
EINVAL
lockp Àμö°¡ À¯¿ëÇÑ ¶ô Á¤º¸¸¦ °¡Áö°í ÀÖÁö ¾Ê°Å³ª, ÆÄÀÏÀÌ ¶ôÀÌ Áö¿øµÇÁö ¾Ê´Â filedes¿Í ¿¬°üÀÌ ÀÖ´Ù.
¸ÅÅ©·Î : int F__SETLK
ÀÌ ¸ÅÅ©·Î´Â ¶ôÀ» ¼³Á¤Çϰųª, Ŭ¸®¾î ÇÒ°ÍÀÓÀ» ÁöÁ¤Çϱâ À§ÇØ fcntl ÇÔ¼ö
¿¡¼ command Àμö·Î »ç¿ëµÇ¾îÁø´Ù. ÀÌ ¸í·ÉÀº fcntl ÇÔ¼ö¿¡ ÁÖ±â À§ÇÑ
¼¼ ¹øÂ° Àμö·Î½á struct flock * ÇüÀÇ Àμö¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ±×·¡¼
´ÙÀ½°ú °°ÀÌ È£ÃâÇÑ´Ù.
fcntl (filedes, F_SETLK, lockp)
¸¸ÀÏ ÇÁ·Î¼¼½º°¡ ¶ôÀ» ¼³Á¤ÇÒ Áö¿ª¿¡¼ ÀÌ¹Ì ¾î´À ÇѺκÐÀÌ ¶ôÀ» °¡Áö°í ÀÖ´Ù¸é, ÀÌ¹Ì ÀÖ´ø ¶ôÀº »õ·Î¿î ¶ôÀ¸·Î ´ëüµÈ´Ù. ´ç½ÅÀº F_UNLCKÀÇ Å¸ÀÔÀ¸·Î ¶ôÀ» ÁöÁ¤ÇÏ¿©¼ ¶ôÀ» Á¦°ÅÇÒ ¼öµµ ÀÖ´Ù.
¸¸ÀÏ ¶ôÀÌ ¼³Á¤µÇÁö ¾Ê¾Ò´Ù¸é, fcntlÀº -1ÀÇ °ªÀ» Áï½Ã ¸®ÅÏÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ¶ôÀ» ÇØÁ¦Çϱâ À§ÇØ ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀ» ±â´Ù¸®´Â ºí·ÏÀ» ÇÏÁö ¾Ê´Â´Ù. ¸¸ÀÏ fcntl ÀÌ ¼º°øÇϸé, -1ÀÌ ¾Æ´Ñ ´Ù¸¥ °ªÀ» ¸® ÅÏÇÑ´Ù. ´ÙÀ½ errno´Â ÀÌ ÇÔ¼ö¿¡¼ Á¤ÀÇÇÑ ¿¡·¯ »óȲÀÌ´Ù.
EACCES
EAGAIN
ÆÄÀÏ¿¡ Á¸ÀçÇϰí ÀÖ´Â ¶ôÀ¸·Î ºí·ÏµÇ¾îÁ³±â ¶§¹®¿¡ ±× ¶ôÀ» ¼³Á¤ÇÒ ¼ö ¾ø´Ù. ¾î¶² ½Ã½ºÅÛ¿¡¼ ÀÌ °æ¿ì¿¡ EAGAINÀ» »ç¿ëÇϰí, ´Ù¸¥ ½Ã½ºÅÛ¿¡¼´Â EACCES¸¦ »ç¿ëÇÑ´Ù; ´ç½ÅÀÇ ÇÁ·Î±×·¥Àº F_SETLK ÈÄ Ã³·³ ±×µéÀ» Ãë±ÞÇÒ °ÍÀÌ´Ù.
EBADF
filedes Àμö°¡ À¯¿ëÇÏÁö ¾Ê°Å³ª; ´ç½ÅÀÌ Àб⠶ôÀ» ¿äûÇßÁö¸¸ filedes´Â Àб⠸ðµå·Î °³¹æµÇÁö ¾Ê¾Ò °Å³ª, ¶Ç´Â ¾²±â ¶ôÀ» ¿äûÇߴµ¥, ±× filedes ´Â ¾²±â¸ðµå·Î °³¹æµÇÁö ¾Ê¾Ò°Å³ª; ÀÌ µÑÁß¿¡ ÇϳªÀÌ´Ù.
EINVAL
lockpÀμö°¡ À¯¿ëÇÑ ¶ô Á¤º¸¸¦ ÁöÁ¤ÇÏÁö ¾Ê¾Ò°Å³ª, ¶Ç´Â filedes¿Í ¿¬°üµÈ ÆÄÀÏÀÌ ¶ôÀ» Áö¿øÇÏÁö ¾Ê °Å³ªÀÌ´Ù.
ENOLCK
½Ã½ºÅÛÀÇ ÆÄÀÏ ¶ô ÀÚ¿øµéÀÌ ¹Ù´Ú³µ´Ù; ÀÌ¹Ì ³Ê¹« ¸¹Àº ÆÄÀÏ ¶ôµéÀÌ ±×°÷¿¡ Á¸ÀçÇϰí ÀÖ´Ù. Àß-¸¸ µé¾îÁø ÆÄÀϽýºÅÛµéÀº °áÄÚ ÀÌ ¿¡·¯¸¦ ¹ß»ý½ÃŰÁö ¾Ê´Âµ¥, ±×ÀÌÀ¯´Â ±×µéÀÌ ¶ôÀÇ ¼ö¿¡ ´ëÇÑ ¾Æ¹«·± Á¦ÇÑÀ» °¡Áö°í ÀÖÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ±×·¸Áö¸¸, ´Ù¸¥ ÄÄÇ»ÅÍ(machine)ÀÇ ÆÄÀϽýºÅÛÀ» ³×Æ®¿÷À¸·Î ºÎ ÅÍ °Ë»öÇÏ´Â °Í¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ´Â °á°ú¿Í °°ÀÌ, ´ç½ÅÀº ÀÌó·³ ÀÌ ¿¡·¯°¡ ¹ß»ýÇÒ °¡´É¼ºÀ¸·Î ÀÎÇØ ¼ ¿©ÀüÈ÷ ¶ôÀÇ °³¼ö¸¦ ¼¼¾î¾ß¸¸ ÇÑ´Ù.
¸ÅÅ©·Î : int F__SETLKW
ÀÌ ¸ÅÅ©·Î´Â ¶ôÀ» ¼³Á¤Çϰųª, ¼³Á¤µÈ ¶ôÀ» Áö¿ï°ÍÀÓÀ» ÁöÁ¤Çϱâ À§Çؼ, fcntl ÇÔ¼ö¿¡ command ÀÎ ¼ö·Î¼ »ç¿ëµÇ¾îÁø´Ù. À̰ÍÀº F_SETLK ¸í·É°ú °°Áö¸¸, ±× ¿äûÀÌ ¹Þ¾Æµé¿© Áú¶§°¡Áö ÇÁ·Î¼¼½º¸¦ ºí·Ï(¶Ç´Â ±â´Ù¸²)ÇÏ°Ô ÇÑ´Ù. ÀÌ ¸í·ÉÀº F_SETLK ¸í·Éó·³ ¼¼¹øÂ°Àμö·Î¼ struct flock * ŸÀÔÀÇ Àμö¸¦ ÇÊ¿ä·Î ÇÑ´Ù. fcntlÀÇ ¸®Åϰª°ú ¿¡·¯µéÀº F_SETLK ¸í·ÉÀ» À§ÇѰͰú µ¿ÀÏÇÏÁö¸¸, À̰͵鿡 ´õÇØÁø ¿¡·¯ »óȲµéÀÌ ¹Ø¿¡ ¼³¸íµÇ¾î ÀÖ´Ù.
EINTR
ÀÌ ÇÔ¼ö´Â ±â´Ù¸®´Â µ¿¾È ½ÅÈ£¿¡ ÀÇÇØ ÀÎÅÍ·´Æ® µÇ¾îÁ³´Ù. 21.5Àý [Interrrpted Primitives] 293Æä ÀÌÁö ÂüÁ¶.
EDEADLK
±³Âø»óÅÂ(¿ªÀÚÁÖ: ´ÙÁß ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛ¿¡¼ ¹ß°ßµÉ ¼ö ÀÖ´Â »óȲÀ¸·Î ÇÁ·Î¼¼½ºµéÀÌ ¼·Î ÀÛ¾÷À» ÁøÇàÇÏÁö ¸øÇÏ°í ¿µ¿øÈ÷ ´ë±â »óÅ·ΠºüÁö°Ô µÇ´Â Çö»óÀ» ±³Âø »óŶó Çϴµ¥, º¸Åë ÇÁ·Î¼¼½º »çÀÌ ¿¡ ÇÒ´çµÈ ÀÚ¿øÀÇ Ãæµ¹·Î ÀÎÇÏ¿© ¹ß»ýÇÑ´Ù.)°¡ °ËÃâµÇ¾îÁ³´Ù. À̰ÍÀº ¸¸ÀÏ ÀÌ¹Ì ÀÚ½ÅÀÌ Á¦¾îÇϰí ÀÖ ´Â ¶ôµÈ Áö¿ª(locked region)À» °®°í ÀÖ´Â µÎ °³ÀÇ ÇÁ·Î¼¼½º°¡ ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ¶ôµÈ µ¿ÀÏÇÑ Áö ¿ªÀ» ¿äûÇßÀ» ¶§ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.
´ÙÀ½ ¸ÅÅ©·Î´Â flock ±¸Á¶Ã¼ÀÇ 1_type ¸â¹ö¸¦ À§ÇÑ °ªµé·Î »ç¿ëµÇ¾îÁö±â À§Çؼ Á¤ÀǵǾîÁ³´Ù. ÀÌ °ªµéÀº Á¤¼ö »ó¼öÀÌ´Ù.
-----------------------------------------------------------
F_RDLCK
ÀÌ ¸ÅÅ©·Î´Â Àбâ(¶Ç´Â ºÐ¹è) ¶ôÀ» ÁöÁ¤Çϱâ À§ÇØ »ç¿ëµÈ´Ù.
F_WRLCK
ÀÌ ¸ÅÅ©·Î´Â ¾²±â(¶Ç´Â ¹èŸÀû) ¶ôÀ» ÁöÁ¤Çϱâ À§ÇØ »ç¿ëµÈ´Ù.
F_UNLCK
ÀÌ ¸ÅÅ©·Î´Â ±× Áö¿ª¿¡ ¶ôÀÌ °É¸®Áö ¾Êµµ·Ï ÁöÁ¤Çϱâ À§ÇØ »ç¿ëµÇ¾îÁø´Ù.
ÆÄÀÏ ¶ôÅ·ÀÇ ¾²ÀÓ¼¼¿¡ ´ëÇÑ ÇϳªÀÇ ¿¹·Î½á, ¸¸ÀÏ µ¿½Ã¿¡ ¿©·¯ ´Ù¸¥ »ç¿ëÀڵ鿡 ÀÇÇØ ½ÇÇàµÇ¾îÁú ¼ö ÇÁ·Î±×·¥À» »ý°¢Çغ¸¶ó. ±×¿Í °°Àº ÇÁ·Î±×·¥Àº ³ôÀº Á¡¼ö¸¦ ±â·ÏÇϱâ À§ÇØ ÇÑ ÆÄÀÏÀ» »ç¿ëÇÏ´Â °ÔÀÓÇÁ·Î±×·¥ÀÌ µÉ ¼ö ÀÖ°í. ¶Ç ´Ù¸¥ ¿¹´Â °è»êÀÇ ¸ñÀûÀ» À§ÇÑ Á¤º¸·Î »ç¿ëÇÏ´Â ·¹Äڵ带 °®´Â ÇÁ ·Î±×·¥ÀÌ µÇ¾îÁú °ÍÀÌ´Ù.
ÆÄÀÏ¿¡ ¾²±âÀ§ÇØ µ¿½Ã¿¡ ¿©·¯°³ÀÇ ÇÁ·Î±×·¥ º¹Á¦º»À» °®´Â´Ù¸é, ±× ÆÄÀÏÀÇ ³»¿ëÀº ³ªÁß¿¡ ¾û¸ÁÄ£Àå ÀÌ µÇ¾îÁú °ÍÀÌ´Ù. ±×·¯³ª ´ç½ÅÀº ÆÄÀÏ¿¡ ¾²±â°¡ ½ÇÁ¦·Î ¹ß»ýÇϱâ Àü¿¡ ±× ÆÄÀÏ¿¡ ¾²±â¶ôÀ» ¼³Á¤ÇØ ¼ ±×¿Í °°Àº ¹®Á¦µéÀÇ ¹ß»ýÀ» ¿¹¹æÇÒ ¼ö ÀÖ´Ù.
¸¸ÀÏ ÇÁ·Î±×·¥ÀÌ ±× ÆÄÀÏÀ» ÀÐÀ» Çʿ䰡 ÀÖ°í ±× ÆÄÀÏÀÇ ³»¿ëÀÌ È®½ÇÇϱ⸦ ¿øÇÑ´Ù¸é, ±×¶§ Àб⠶ôÀ» »ç¿ëÇÒ¼ö ÀÖ´Ù. Àб⠶ôÀÌ ¼³Á¤µÈ µ¿¾È ¾î¶² ´Ù¸¥ ÇÁ·Î¼¼½ºµµ ¾²±â À§Çؼ ±× ºÎºÐ¿¡ ¶ôÀ» ¼³ Á¤ÇÒ·Á¸é ±â´Ù·Á¾ß ÇÑ´Ù.
ÆÄÀÏ ¶ôÀº ÆÄÀÏÀ» ¾ï¼¼½º ÇÏ´Â °ÍÀ» Á¦¾îÇϱâ À§ÇÑ ÀÚ¹ßÀû ÇÁ·ÎÅäÄÝÀÓÀ» ±â¾ïÇ϶ó. ±×·¡¼ ¶ô ÇÁ ·ÎÅäÄÝÀ» »ç¿ëÇÏÁö ¾Ê´Â ÇÁ·Î±×·¥¿¡ ÀÇÇØ ±× ÆÄÀÏÀ» ¾ï¼¼½ºÇÒ °¡´É¼ºÀº ¿©ÀüÀÌ ÀÖ´Ù.
8.12 ÀÎÅÍ·´Æ®·Î Á¶Á¾µÈ ÀÔ·Â.
¸¸ÀÏ ´ç½ÅÀÌ ÆÄÀÏ ±â¼úÀÚ»óÀÇ FASYNC »óȲ Ç÷¡±×¸¦ ¼³Á¤Çϸé( 8.10Àý[File Status Flags], 116 ÆäÀÌÁöÂüÁ¶ ), SIGIO ½ÅÈ£´Â ÆÄÀÏ ±â¼úÀÚ »ó¿¡¼ ÀÔ·ÂÀ̳ª Ãâ·ÂÀÌ °¡´ÉÇÏ°Ô µÉ ¶§¸¶´Ù º¸³»¾îÁø´Ù. ±× ½ÅÈ£¸¦ ¹ÞÀ» ÇÁ·Î¼¼½º³ª ÇÁ·Î¼¼½º ±×·ìÀº fcntl ÇÔ¼ö¿¡ F_SETOWN ¸í·ÉÀ» »ç¿ëÇØ¼ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ¸¸ÀÏ ±× ÆÄÀÏ ±â¼úÀÚ°¡ ¼ÒÄÏÀ̶ó¸é, À̰ÍÀº ¼ÒÄÏ¿¡ µµÂøÇÑ ¹üÀ§ ¹ÛÀÇ µ¥ÀÌÅͰ¡ ÀÖÀ» ¶§, ±×¶§ ¹è´ÞµÈ SIGURG ½ÅÈ£¸¦ ¹ÞÀ» ¼ö·ÉÀÚ¸¦ ¼±ÅÃÇÑ´Ù; 11.8.8 [Out-of-Band Data], 173ÆäÀÌÁö ÂüÁ¶.
¸¸ÀÏ ±× ÆÄÀÏ ±â¼úÀÚ°¡ Å͹̳¯ µð¹ÙÀ̽º¿Í ±³½ÅÇÑ´Ù¸é, SIGIO ½ÅÈ£´Â Å͹̳¯ÀÇ Àü¸é(foreground) ÇÁ·Î¼¼½º ±×·ì¿¡ º¸³»¾îÁø´Ù. 24Àå [Job Control] 335 ÆäÀÌÁö ÂüÁ¶.
ÀÌ Àý¾ÈÀÇ ½Éº¼µéÀº Çì´õÆÄÀÏ 'fcntl.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.
¸ÅÅ©·Î : int F__GETOWN
ÀÌ ¸ÅÅ©·Î´Â SIGIO ½ÅÈ£¸¦ º¸³½ ÇÁ·Î¼¼½º³ª ÇÁ·Î¼¼½º ±×·ì¿¡ ´ëÇÑ Á¤º¸¸¦ ¾òÀ½À» Á¤Çϱâ À§ÇØ fcntl ÇÔ¼öÀÇ command Àμö·Î¼ »ç¿ëµÇ¾îÁø´Ù. (Å͹̳¯¿¡¼, À̰ÍÀº ½ÇÁ¦·Î´Â Àü¸é(foreground) ÇÁ·Î ¼¼½º ±×·ì ¾ÆÀ̵ð(ID)¸¦ tcgetpgrpÀ» »ç¿ëÇØ¼ ¾òÀ» ¼ö ÀÖ´Ù; 24.7.3Àý [Terminal Access Functions] 350 ÆäÀÌÁö ÂüÁ¶.) ¸®ÅϰªÀº ÇÁ·Î¼¼½º ID·Î ÀÎÅÍ·´Æ® µÇ¾îÁö°í; ¸¸ÀÏ À½ÀÇ °ªÀ̸é, ±× Àý´ë°ªÀÌ ÇÁ·Î¼¼½º ±×·ì ID ÀÌ´Ù.
´ÙÀ½ÀÇ errno´Â ÀÌ ¸í·É¿¡¼ Á¤ÀÇÇÑ ¿¡·¯ »óȲÀÌ´Ù.
EBADF
filedes Àμö°¡ À¯¿ëÇÏÁö ¾Ê´Ù.
¸ÅÅ©·Î : int F__SETOWN
ÀÌ ¸ÅÅ©·Î´Â SIGIO ½ÅÈ£¸¦ º¸³»±â À§ÇÑ ÇÁ·Î¼¼½º³ª ÇÁ·Î¼¼½º ±×·ì ID¸¦ ¼³Á¤ÇÔÀ» Á¤Çϱâ À§ÇØ fcntl ÇÔ¼öÀÇ command Àμö·Î¼ »ç¿ëµÇ¾îÁø´Ù. ÀÌ ¸í·ÉÀº fcntl ÇÔ¼öÀÇ ¼¼ ¹øÂ° Àμö·Î pid_t ŸÀÔÀÇ Àμö¸¦ ÇÊ¿ä·Î ÇÑ´Ù, ±×·¡¼ ´ÙÀ½°ú °°Àº Çü½ÄÀ¸·Î È£ÃâµÈ´Ù:
fcntl (filedes, F_SETOWN, pid)
pid Àμö´Â ÇÁ·Î¼¼½º ±×·ì IDÀÌ´Ù. ´ç½ÅÀÌ ±× °ªÀ» À½ÀÇ °ªÀ¸·Î ÁÖ´õ¶óµµ ±× Àý´ë°ªÀÌ ÇÁ·Î¼¼½º ±×·ì ID°¡ µÇ¾îÁø´Ù. ÀÌ ¸í·ÉÀ» »ç¿ëÇÑ fcntlÇÔ¼ö·ÎºÎÅÍÀÇ ¸®ÅϰªÀº ¿¡·¯°¡ ¹ß»ýµÈ °æ¿ì¿¡ -1À̰í, ¼º°øÇÏ¸é ¾î¶² ´Ù¸¥ °ªÀÌ µÈ´Ù. ´ÙÀ½ÀÇ errno´Â ÀÌ ¸í·É¿¡¼ Á¤ÀÇÇÑ ¿¡·¯»óȲÀÌ´Ù.
EBADF
filedes Àμö°¡ À¯¿ëÇÏÁö ¾Ê´Ù.
ESRCH
pid¿¡ ÇØ´çÇÏ´Â ¾Æ¹«·± ÇÁ·Î¼¼½º³ª ÇÁ·Î¼¼½º ±×·ìÀÌ ¾ø´Ù.