ÀÔÃâ·Â ´ÙÁßÈ­ ¼Ò°³ - select
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.


Contents

1 ÀÔÃâ·Â ´ÙÁßÈ­
1.1 ÀÔÃâ·Â ´ÙÁßÈ­ ¸ðµ¨
2 selectÇÔ¼ö·Î ÀÔÃâ·Â ´ÙÁßÈ­
2.1 fd_set °ü¸®
2.2 ¿¹Á¦ 1
2.3 ¿¹Á¦ 2
3 °ü·Ã ±Û

1 ÀÔÃâ·Â ´ÙÁßÈ­

1.1 ÀÔÃâ·Â ´ÙÁßÈ­ ¸ðµ¨

ÀÔÃâ·Â°ú °ü·ÃµÈ ÇÔ¼öµéÀº ±âº»ÀûÀ¸·Î ºÀ¼â/µ¿±âÀû À¸·Î ÀÛµ¿ÇÑ´Ù. ºÀ¼âÇüÀº µ¥ÀÌÅ͸¦ ó¸®ÇÏ´Â Á÷°üÀûÀÎ ¹æ½ÄÀ̱ä ÇÏÁö¸¸, µÎ °³ ÀÌ»óÀÇ ÆÄÀÏÀ» ó¸®ÇÒ ¶§ ¹®Á¦°¡ µÈ´Ù. ÇϳªÀÇ ÆÄÀÏ¿¡¼­ ºÀ¼â°¡ µÇ¾î ¹ö¸®¸é ´Ù¸¥ ÆÄÀÏÀÇ µ¥ÀÌÅÍ´Â ¿µ¿øÈ÷ ÀÐÁö ¸øÇÒ ¼öµµ Àֱ⠶§¹®ÀÌ´Ù. ºñ ºÀ¼â ¹æ½ÄÀ¸·Î ó¸®ÇÏ´Â ¹æ¹ýµµ ÀÖÀ¸³ª ÀϹÝÀûÀ¸·Î ºñºÀ¼â ¹æ½ÄÀº ºÀ¼â ¹æ½Ä¿¡ ºñÇØ¼­ ±î´Ù·Î¿î ÇÁ·Î±×·¡¹Ö ±â¼úÀ» ¿ä±¸ÇÑ´Ù.

ºÀ¼â/µ¿±â¼ºÀ» À¯ÁöÇϸ鼭 µÎ °³ ÀÌ»óÀÇ ÆÄÀÏÀ» ó¸®ÇÏ´Â ÀÏ¹Ý ÀûÀÎ ¹æ¹ýÀº ¸ÖƼ ÇÁ·Î¼¼½º¿Í ¸ÖƼ ¾²·¹µå¸¦ ÀÌ¿ëÇÑ ¹æ½ÄÀÌ´Ù. À̵é ÇÁ·Î±×·¡¹Ö ±â¼úÀº ÆÄÀÏ´ç ÇϳªÀÇ ÇÁ·Î¼¼½º(ȤÀº ¾²·¹µå)¸¦ ÇÒ´çÇØ¼­ µ¿½Ã¿¡ µÎ°³ ÀÌ»óÀÇ ÆÄÀÏÀ» ó¸®ÇÑ´Ù.


ÀÌ ¹æ½ÄÀº ´Ü¼øÇØ º¸ÀÌÁö¸¸, ´ÜÀÏ ÇÁ·Î¼¼½º/´ÜÀÏ ¾²·¹µå ¹æ½ÄÀÇ ÇÁ·Î±×·¥¿¡ ºñÇØ¼­ ´ÙÀ½°ú °°Àº º¹ÀâÇÑ ÇÁ·Î±×·¡¹Ö À̽´¸¦ °¡Áö°í ÀÖ´Ù.
  1. ÇÁ·Î¼¼½º, ¾²·¹µå°£ Åë½Å : ÇÁ·Î¼¼½º°£ Åë½ÅÀ» À§Çؼ­ IPC¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. IPC´Â ´Ù·ç±â ±î´Ù·Î¿î µµ±¸´Ù.
  2. ÇÁ·Î¼¼½º µ¿±âÈ­, ¾²·¹µå µ¿±âÈ­¸¦ À§Çؼ­ IPC ȤÀº mutex¿Í °°Àº ´Ù·ç±â Èûµç ±â¼úÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.
  3. ÇÁ·Î¼¼½º¿Í ¾²·¹µåÀÇ »ý¼º¿¡´Â ¸¹Àº ºñ¿ëÀÌ ¼Ò¸ðµÈ´Ù.

ÀÔÃâ·Â ´ÙÁßÈ­´Â ´ÜÀÏ ÇÁ·Î¼¼½º¿¡¼­ ¿©·¯ °³ÀÇ ÆÄÀÏÀ» Á¦¾îÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ÀÔÃâ·Â ´ÙÁßÈ­´Â "ºñ µ¿±â / ºÀ¼â ÀÔÃâ·Â ¸ðµ¨"ÀÇ ÀÀ¿ëÀÌ´Ù. ÀÔÃâ·Â ¸ðµ¨ ¹®¼­ º¸±â.


ÀÔÃâ·Â ´ÙÁßÈ­´Â ¿©·¯ °³ÀÇ ÆÄÀÏÀ» ´Ù·ç±â À§Çؼ­, ÆÄÀÏ ±â¼úÀÚ¸¦ ¹è¿­ (±×·ì)À¸·Î °ü¸®ÇÑ´Ù. µ¥ÀÌÅÍ º¯°æÀ» °¨½ÃÇÒ ÆÄÀÏ ±â¼úÀÚ¸¦ ¹è¿­¿¡ Æ÷ÇÔ½Ã۰í, ¹è¿­¿¡ Æ÷ÇÔµÈ ÆÄÀÏ ±â¼úÀÚ¿¡ (Àбâ, ¾²±â, ¿¡·¯¿Í °°Àº)µ¥ÀÌÅÍ º¯°æÀÌ ¹ß»ýÇÏ¸é ÆÄÀÏ ±â¼úÀÚ¿¡ ´ëÀÀµÇ´Â ¹è¿­¿¡ Ç¥½ÃÇÏ´Â ¹æ½ÄÀÌ´Ù. °³¹ßÀÚ´Â ÆÄÀÏ ±â¼úÀÚ ¹è¿­ÀÇ °ªÀ» °Ë»çÇÏ´Â °ÍÀ¸·Î ¿©·¯ °³ÀÇ ÆÄÀÏÀ» ó¸®ÇÒ ¼ö ÀÖ°Ô µÈ´Ù.


2, 4, 8¹ø ÆÄÀÏ ±â¼úÀÚ¿¡ µ¥ÀÌÅÍ º¯È­°¡ ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù.

ÀÌ ¸ðµ¨Àº ¸ðµ¨ ƯÀ¯ÀÇ Á¦ÇÑÀ» °¡Áö°í ÀÖ´Ù.
  1. ÆÄÀÏ ±â¼úÀÚ Å×À̺íÀÇ Å©±â
    ó¸®ÇÒ ¼ö ÀÖ´Â ÆÄÀÏÀÇ ÃÖ´ë Å©±â´Â "ÇÁ·Î¼¼½º°¡ ¿­ ¼ö ÀÖ´Â ÆÄÀÏÀÇ ÃÖ´ë °³¼ö"¿Í º°µµ·Î "ÆÄÀÏ ±â¼úÀÚ Å×À̺íÀÇ Å©±â"ÀÇ ¿µÇâÀ» ¹Þ´Â´Ù. ÀϹÝÀûÀ¸·Î ÆÄÀÏ ±â¼úÀÚ Å×À̺íÀÇ Å©±â´Â 1024Àε¥, ulimit(1) µîÀ¸·Î º¯°æÇÒ ¼ö ¾ø´Ù.
  2. ¹è¿­·Î¼­ °¡Áö´Â ¼º´É ¹®Á¦
    À̺¥Æ® ±â¹ÝÀÌ ¾Æ´Ï±â ¶§¹®¿¡, ¹è¿­¿¡ ÀÖ´Â ¸ðµç °ªÀ» ÀüºÎ °Ë»çÇØ¾ß ÇÑ´Ù. 1000°³ÀÇ Å¬¶óÀÌ¾ðÆ®°¡ ¿¬°áµÇ¾î ÀÖ°í ÀÌÁß ¾î´À Çϳª¿¡ µ¥ÀÌÅÍ º¯°æÀÌ ÀÌ·ç¾îÁ³´Ù¸é, ÃÖ¾ÇÀÇ °æ¿ì 1000°³ÀÇ Çʵ带 ¸ðµÎ °Ë»çÇØ¾ß ÇÑ´Ù.
  3. º´·Ä 󸮰¡ ¾Æ´Ï´Ù.
    ÀÌ ¸ðµ¨Àº ¸ÖƼ ¾²·¹µå¿Í °°Àº º´·Ä 󸮰¡ ¾Æ´Ï´Ù. "µ¥ÀÌÅ͸¦ Àо ó¸®Çϰí ÀÀ´äÇÏ´Â"½Ã°£ µ¿¾È ´Ù¸¥ ÆÄÀÏÀº ´ë±â ÇØ¾ß ÇÑ´Ù. ±×·¯¹Ç·Î µ¥ÀÌÅÍ Ã³¸® °úÁ¤ÀÌ ±ä ¼­ºñ½º¿¡ Àû¿ëÇϱ⿡´Â Àû´çÇÑ ¸ðµ¨ÀÌ ¾Æ´Ï´Ù. µ¥ÀÌÅÍ Ã³¸® °úÁ¤ÀÌ ÂªÀº ¸Þ½ÃÁö Àü´Þ ¼­ºñ½º¿¡ ÀûÇÕÇÑ ¸ðµ¨ÀÌ´Ù.

ÀÌ·¯ÇÑ ´ÜÁ¡ÀÌ ÀÖÁö¸¸ ¸Å¿ì °ß°íÇÑ ¸ðµ¨À̸ç, ÇÁ·Î±×·¡¹Ö ±â¼úÀÌ ´Ü¼øÇϱ⠶§¹®¿¡ ³Î¸® »ç¿ëµÇ°í ÀÖ´Ù.

2 selectÇÔ¼ö·Î ÀÔÃâ·Â ´ÙÁßÈ­

ÀÔÃâ·Â ´ÙÁßÈ­´Â ¿©·¯ °³ÀÇ ÆÄÀÏ¿¡¼­ ¹ß»ýÇÏ´Â ÀÔÃâ·ÂÀ» ÇÔ²² °ü¸®ÇÏ´Â ±â¼úÀÌ´Ù. ¿ø¸®´Â °£´ÜÇÏ´Ù. ÀÔÃâ·ÂÀ» °ü¸®ÇϰíÀÚ ÇÏ´Â ÆÄÀÏÀÇ ±×·ìÀ» fd_setÀ̶ó´Â ÆÄÀÏ ºñÆ® ¹è¿­¿¡ Áý¾î ³Ö°í, ºñÆ® ¹è¿­ÀÇ °ªÀÌ º¯Çß´ÂÁö¸¦ È®ÀÎÇÏ´Â ¹æ½ÄÀÌ´Ù.

¸®´ª½º´Â BSD selectÇÔ¼ö·Î ÀÔÃâ·Â ´ÙÁßÈ­¸¦ ´Þ¼ºÇÑ´Ù.

int select (int nfds, fd_set *readfds, fd_set *writefds,  
    fd_set *exceptfds, struct timeval *timeout); 
 
´ÙÀ½Àº selectÇÔ¼öÀÇ ¸Å°³ º¯¼ö´Ù.
  1. nfds : °ü¸®ÇÏ´Â ÆÄÀÏÀÇ °³¼ö¸¦ µî·ÏÇÑ´Ù. ÆÄÀÏÀÇ °³¼ö´Â ÃÖ´ë ÆÄÀÏ ÁöÁ¤ ¹øÈ£ + 1·Î ÁöÁ¤ÇÏ¸é µÈ´Ù.
  2. fd_set : °ü¸®ÇÏ´Â ÆÄÀÏÀÇ ÁöÁ¤¹øÈ£°¡ µî·ÏµÇ¾î ÀÖ´Â ºñÆ® ¹è¿­ ±¸Á¶Ã¼
    • readfds : ÀÐÀ» µ¥ÀÌÅͰ¡ ÀÖ´ÂÁö °Ë»çÇϱâ À§ÇÑ ÆÄÀÏ ¸ñ·Ï
    • writefds : ¾²¿©Áø µ¥ÀÌÅͰ¡ ÀÖ´ÂÁö °Ë»çÇϱâ À§ÇÑ ÆÄÀÏ ¸ñ·Ï
    • exceptfds : ÆÄÀÏ¿¡ ¿¹¿Ü »çÇ×µéÀÌ ÀÖ´ÂÁö °Ë»çÇϱâ À§ÇÑ ÆÄÀÏ ¸ñ·Ï
  3. timeout : selectÇÔ¼ö´Â fd_set¿¡ µî·ÏµÈ ÆÄÀϵ鿡 µ¥ÀÌÅÍ º¯°æÀÌ ÀÖ´ÂÁö¸¦ timeoutµ¿¾È ±â´Ù¸°´Ù. ¸¸¾à timeout½Ã°£µ¿¾È º¯°æÀÌ ¾ø´Ù¸é 0À» ¹Ýȯ ÇÑ´Ù.

fd_set ±¸Á¶Ã¼´Â Àº 1024Å©±â¸¦ °¡Áö´Â ºñÆ® ¹è¿­À» Æ÷ÇÔÇϰí Àִµ¥, ÆÄÀÏ ÁöÁ¤ ¹øÈ£´Â °¢ ºñÆ® ¹è¿­ ÷ÀÚ¿¡ ´ëÀÀµÇ´Â ±¸Á¶¸¦ °¡Áö°í ÀÖ´Ù. ¿¹¸¦ µé¾î ÆÄÀÏ ÁöÁ¤¹øÈ£°¡ 3À̶ó¸é 4¹øÂ° ºñÆ®¹è¿­¿¡ ´ëÀÀµÈ´Ù. (¹è¿­Àº 0ºÎÅÍ ½ÃÀÛÇϱ⠶§¹®)


¸¸¾à º¯°æµÈ µ¥ÀÌÅͰ¡ ÀÖ´Ù¸é ÇØ´ç ºñÆ®°ªÀÌ 1·Î ¼³Á¤ÀÌ µÇ°í, ÇÁ·Î±×·¥Àº ÀÌ ºñÆ® °ªÀ» °Ë»çÇÔÀ¸·Î½á ¾î¶² ÆÄÀÏ ÁöÁ¤ ¹øÈ£¿¡ º¯°æµÈ µ¥ÀÌÅͰ¡ ÀÖ´ÂÁö È®ÀÎÇØ¼­ Àбâ/¾²±â¸¦ ÇÏ¸é µÈ´Ù.

select ÇÔ¼ö´Â µ¥ÀÌÅͰ¡ º¯°æµÈ ÆÄÀÏÀÇ °³¼ö Áï fd_set¿¡¼­ ºñÆ® °ªÀÌ 1ÀÎ ÇʵåÀÇ °³¼ö¸¦ ¹ÝȯÇÑ´Ù. µ¥ÀÌÅͰ¡ º¯°æµÈ ÆÄÀÏÀÇ ¸ñ·ÏÀ» ¹ÝȯÇÏÁö ¾Ê´Â´Ù´Â °Í¿¡ ÁÖÀÇÇØ¾ß ÇÑ´Ù. ±×·¯¹Ç·Î ¸¸¾à ÃÖ´ë ÆÄÀÏ ÁöÁ¤ ¹øÈ£°¡ 1000 À̰í select°¡ 1À» ¹Ýȯ Çß´Ù¸é, 0¹ø ºÎÅÍ ·çÇÁ¸¦ ¼øÈ¯Çϸ鼭 ¾î¶² ÆÄÀÏÀÌ º¯°æµÇ¾ú´ÂÁö¸¦ °Ë»çÇØ¾ß ÇÑ´Ù. ÃÖ¾ÇÀÇ °æ¿ì 1000¹ø ·çÇÁ¸¦ µ¹¾Æ¾ß ÇÑ´Ù. selectÀÇ ÀÛµ¿¹æ½Ä¿¡ µû¸¥ ±Ùº»ÀûÀÎ ¹®Á¦Àε¥, ¿¬°á ÆÄÀÏÀÇ ¸ñ·ÏÀ» º°µµÀÇ ¹è¿­¿¡ À¯Áö ÇÏ´Â °ÍÀ¸·Î ¾î´À Á¤µµ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ±â´Â ÇÏ´Ù. (¿ÏÀüÇÑ ¹æ¹ýÀº ¾Æ´Ï´Ù. ¿¬°áµÈ ÆÄÀÏÀÌ Çϳª°í ÀÌ ÆÄÀÏÀÇ ÁöÁ¤ ¹øÈ£°¡ 1000À̶ó¸é, 1¹ø¸¸ ºñ±³ÇÒ ¼ö ÀÖÁö¸¸, ¿¬°áµÈ ÆÄÀÏÀÌ 1000À̶ó¸é ¿©ÀüÈ÷ 1000¹øÀÇ ·çÇÁ¸¦ µ¹¾Æ¾ß ÇÒ ¼ö ÀÖ´Ù.)

2.1 fd_set °ü¸®

selectÇÔ¼öÀÇ ÇÙ½ÉÀº fd_set±¸Á¶Ã¼¿¡ ÀÖ´Ù. fd_set±¸Á¶Ã¼´Â ´ÙÀ½°ú °°ÀÌ °ü¸®¿ä¼Ò°¡ ÇÊ¿äÇÏ´Ù.
  1. fd_set±¸Á¶Ã¼¸¦ 0À¸·Î ÃʱâÈ­ ÇÑ´Ù.
  2. fd_set¿¡ °ü¸®ÇÒ ÆÄÀÏÀ» µî·ÏÇÑ´Ù.
  3. selectÇÔ¼ö°¡ ¹Ýȯ ÇßÀ» ¶§, ¾î¶² ÆÄÀÏ¿¡ º¯°æÀÌ ÀϾ´ÂÁö È®ÀÎÇϱâ À§Çؼ­ fd_setÀÇ °¢ ÇʵåÀÇ °ªÀ» °Ë»çÇÑ´Ù.
  4. fd_set¿¡¼­ ÆÄÀÏÀ» Á¦°ÅÇÑ´Ù.

fd_setÀ» °ü¸®Çϱâ À§Çؼ­ ´ÙÀ½ÀÇ ¸ÅÅ©·Î ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.
  1. FD_ZERO(fd_set *fds) : fdsÀÇ ºñÆ®Çʵ带 0À¸·Î ÃʱâÈ­ ÇÑ´Ù.
  2. FD_SET(fd, *fds) : fds ºñÆ® Çʵ忡 fd¸¦ Ãß°¡ÇÑ´Ù. ´ëÀÀµÇ´Â ÇʵåÀÇ °ªÀÌ 1·Î º¯°æµÈ´Ù.
  3. FD_ISSET(fd, *fds) : fd¿¡ º¯°æÀÌ ÀÖ´ÂÁö¸¦ °Ë»çÇÑ´Ù. ÇʵåÀÇ °ªÀÌ 1À̸é TRUE¸¦ ¹ÝȯÇÑ´Ù.
  4. FD_CLR(fd, *fds); : fd¸¦ fds ºñÆ® Çʵ忡¼­ Á¦°ÅÇÑ´Ù.

fd_setÀº ´ÜÀÏ ºñÆ® Çʵå Å×À̺í À̶ó´Â °Í¿¡ ÁÖ¸ñÇØ¾ß ÇÑ´Ù. Áï fd_setÀº ÀÌÀü »óŸ¦ ±â¾ïÇÏÁö ¸øÇÑ´Ù. ¾Æ·¡ÀÇ ±×¸²À» º¸ÀÚ.


  1. FD_ZERO·Î readfds¸¦ ÃʱâÈ­ ÇÑ´Ù.
  2. ÆÄÀÏ ÁöÁ¤ ¹øÈ£ 2, 4, 8À» readfds¿¡ Ãß°¡ÇÑ´Ù. ´ëÀÀµÇ´Â ÇʵåÀÇ °ªÀ» 1·Î ¼³Á¤ÇÑ´Ù.
  3. 4¹øÆÄÀÏ¿¡ ÀÐÀ» µ¥ÀÌÅͰ¡ ÀÖ´Ù¸é, 4¹øÀ» 1·Î ä¿î´ÙÀ½ ¹ÝȯÇÑ´Ù.
fd_setÀÌ ÀÌÀü »óŸ¦ ±â¾ïÇÏÁö ¸øÇÑ´Ù´Â Àǹ̸¦ ÀÌÇØÇßÀ» °ÍÀÌ´Ù. ±×·¯¹Ç·Î selectÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ ÀÌÀü fd_setÀÇ °ªÀ» ÀúÀåÇØ µÎ¾î¾ß ÇÑ´Ù. ¸Å¹ø fd_set Á¤º¸¸¦ º¹»çÇØ¾ß ÇÑ´Ù´Â°Ô selectÇÔ¼öÀÇ ¶Ç ´Ù¸¥ ´ÜÁ¡ÀÌ´Ù.

2.2 ¿¹Á¦ 1

±×·³ °£´ÜÇÑ ¿¹Á¦ ÇÁ·Î±×·¥À» Çϳª ¸¸µéµµ·Ï ÇÏÀÚ. ÀÌ ¿¹Á¦ ÇÁ·Î±×·¥Àº /tmp/testfile °ú /tmp/testfile2 µÎ°³ÀÇ ÆÄÀÏÀ» Àо ÆÄÀÏ¿¡ ³»¿ëÀÌ Ãß°¡µÉ ¶§¸¶´Ù È­¸é¿¡ »Ñ·ÁÁÖ´Â ÀÏÀ» ÇÑ´Ù.

¿¹Á¦ : select.c
#include <sys/time.h>  
#include <sys/types.h>  
#include <unistd.h>  
#include <fcntl.h>  
#include <stdlib.h>  
#include <string.h>  
#include <stdio.h>  
 
int main() 
{ 
    int fd[2]; 
    int i; 
    int n; 
    int state; 
 
    char buf[255]; 
 
    struct timeval tv; 
 
    fd_set readfds, writefds; 
 
    if ((fd[0] = open("/tmp/testfile", O_RDONLY)) == -1) 
    { 
        perror("file open error : "); 
        exit(0); 
    } 
    if ((fd[1] = open("/tmp/testfile2", O_RDONLY)) == -1) 
    { 
        perror("file open error : "); 
        exit(0); 
    } 
 
    memset (buf, 0x00, 255); 
 
 
    for(;;) 
    { 
        FD_ZERO(&readfds); 
        FD_SET(fd[0], &readfds); 
        FD_SET(fd[1], &readfds); 
 
        state = select(fd[1]+1, &readfds, (fd_set *)0, (fd_set *)0, NULL); 
        switch(state) 
        { 
            case -1: 
                perror("select error : "); 
                exit(0); 
                break; 
 
            default : 
                for (i = 0; i < 2; i++) 
                { 
                    if (FD_ISSET(fd[i], &readfds)) 
                    { 
                        while ((n = read(fd[i], buf, 255)) > 0) 
                            printf("(%d) [%d] %s", state, i, buf); 
                    } 
                } 
                memset (buf, 0x00, 255); 
                break; 
        } 
        usleep(1000); 
    } 
} 
 
À§ÀÇ ÇÁ·Î±×·¥Àº Ãʱ⿡ "/tmp/testfile" ¿Í "/tmp/testfil2" 2°³ÀÇ ÆÄÀÏÀ» ¿­¾î¼­ Ãâ·ÂÀ» ÇÏ°í ÆÄÀÏ ³¡±îÁö °¡´õ¶óµµ ÇÁ·Î±×·¥À» Á¾·áÇÏÁö ¾Ê°í, select ¸¦ ÀÌ¿ëÇØ¼­ ÆÄÀÏ¿¡ »õ·Î¿î ³»¿ëÀÌ ÀԷµǴÂÁö ±â´Ù¸®´ÂÁö¸¦ Á¶»çÇØ¼­ »õ·Î¿î ³»¿ëÀÌ ÀԷµǸé È­¸é¿¡ Ãâ·ÂÇϵµ·Ï ÇÑ´Ù.

¿ì¸®´Â fd[0]°ú fd[1] ÀÇ 2°³ÀÇ ÆÄÀÏ¿¡ ´ëÇØ¼­ ÀÐÀ»¼ö ÀÖ´Â µ¥ÀÌŸ°¡ ÀÖ´ÂÁö¿¡ °ü½ÉÀ» °¡Áö°í ÀÖÀ½À¸·Î, FD_SET À» ÀÌ¿ë readfds ÀÇ ºñÆ®¹è¿­¿¡ fd °ªÀ» ÇÒ´çÇÑ´Ù. (°ªÀ» ÇÒ´çÇÑ´Ù¶ó±â º¸´Ù´Â ºñÆ®¹è¿­ÀÇ À妽º°ªÀÌ fd ¸¦ °¡¸£Å²´Ù ¶ó´Â°Ô Á»´õ Àû´çÇÑ Ç¥ÇöÀϵí ÇÏ´Ù) ±×´ÙÀ½ select ¸¦ ÀÌ¿ëÇØ¼­ readfds ÀÇ ºñÆ®°ªÀ» °¡Á®¿À°í, FD_ISSET À» ÀÌ¿ëÇØ¼­ °¢ ºñÆ®°ªÀ» °Ë»çÇÏ°Ô µÈ´Ù.

ÀÌÄڵ忡¼­´Â for ·çÇÁ¸¦ µ¹¶§ usleep ¸¦ ÀÌ¿ëÇØ¼­ ¾à°£ÀÇ ½Ã°£Áö¿¬À» µÎ¾ú´Âµ¥, ÀÌ´Â CPU Á¡À¯À²À» ¹«ÇÑ´ë(³²´Â ¸¸Å­ ´Ù)·Î Á¡À¯ÇÏ´Â°É ¸·±â À§Çؼ­ ÀÌ´Ù. ³²´Â¸¸Å­ÀÇ CPU¸¦ Á¡À¯Çϰí, ´Ù¸¥ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ÇÊ¿ä·Î ÇÏ¸é µ¹·ÁÁÖ±â´Â ÇÏÁö¸¸ ±âºÐÀÌ ÂòÂòÇØ¼­..

timeval ±¸Á¶Ã¼¸¦ ÀÌ¿ëÇØ¼­ ½Ã°£ Á¦ÇÑÀ» µÎÁö ¾Ê´Â ÀÌÀ¯´Â Á¤±ÔÆÄÀÏÀ» select ÇßÀ»°æ¿ì ÆÄÀÏ ³¡À» ¸¸³ª´õ¶óµµ, readfds ºñÆ®ÀÇ ¼³Á¤À» Á¦´ë·Î ÇÏÁö ¸øÇϱ⠶§¹®ÀÌ´Ù.

2.3 ¿¹Á¦ 2

À̹ø¿¡´Â timeval ±¸Á¶Ã¼¸¦ ÀÌ¿ëÇØ¼­, Á¦Çѽ𣳻¿¡ ÀÔ·ÂÀÌ ÀÖ´ÂÁö ¾ø´ÂÁö °Ë»çÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¾îº¸µµ·Ï ÇÏÀÚ.

¿¹Á¦ : select_time.c
#include <sys/time.h>  
#include <sys/types.h>  
#include <unistd.h>  
#include <fcntl.h>  
#include <stdlib.h>  
#include <string.h>  
#include <stdio.h>  
 
int main() 
{ 
    int        fd; 
    char    buf[255]; 
    int        state;  
 
    struct    timeval tv;  
    fd_set    readfds, writefds; 
    fd = fileno(stdin); 
    FD_ZERO(&readfds); 
 
    for (;;) 
    { 
        FD_SET(fd, &readfds); 
 
        tv.tv_sec = 10; 
        tv.tv_usec = 0; 
 
        state = select(fd + 1, &readfds, (fd_set *)0, (fd_set *)0, &tv); 
        switch(state) 
        { 
            case -1: 
                perror("select error : "); 
                exit(0); 
                break;     
            case 0: 
                printf("Time over\n");             
                close(fd); 
                exit(0); 
                break; 
            default: 
                fgets(buf, 255, stdin); 
                printf("%s", buf); 
                break; 
        } 
    }     
 
} 
 
¸Å¿ì °£´ÜÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. Àú À§¿¡¼­ ¾ð±ÞÇÑ select.c ¸¦ ¾à°£ ¼öÁ¤¸¸ ÇßÀ» µû¸§ ÀÌ´Ù. timeval ±¸Á¶Ã¼ÀÇ ¼¼ÆÃÀ» 10ÃÊ·Î Çß´Ù´Â Á¤µµ¸¸ ´«¿©°Ü º¸¸é µÉ°ÍÀÌ´Ù. select ¸¦ ÀÌ¿ëÇØ¼­ 10ÃÊ µ¿¾È ºí·°ÀÌ µÇ´Âµ¥, ±× 10ÃÊ ¾È¿¡ fd ¿¡ ¾î¶°ÇÑ ÀÔ·ÂÀÌ ¹ß»ýÇÏÁö ¾Ê´Â´Ù¸é select ´Â ½Ã°£ÀÌ 0 À» ³Ñ°ÜÁÖ°í, ¿©±â¿¡ ´ëÇØ ÀûÀýÇÑ Á¶Ä¡¸¦ ÃëÇØÁֱ⸸ ÇÏ¸é µÈ´Ù. À̰ÍÀº °£´ÜÇÑ ¿¹Á¦·Î alarm(2)À» ÅëÇØ¼­ ±¸ÇöÇÒ¼öµµ ÀÖÀ»°ÍÀÌ´Ù.

ÀÌ»ó select ¿¡ °üÇÑ ±âº»ÀûÀÎ ³»¿ë¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸¾Ò´Ù. »ç½Ç select °¡ ÁøÁ¤À¸·Î ÈûÀ» ¹ßÈÖÇÏ´Â °÷Àº Á¤±ÔÆÄÀÏ °ü·Ã ÀÛ¾÷À̶ó±â º¸´Ù´Â ´ÙÁßÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ ¹Þ¾ÆµéÀÌ´Â ³×Æ®¿÷¼­¹öÀÇ Á¦ÀÛ¿¡ ÀÖÀ»°ÍÀÌ´Ù. ÀÌ·¯ÇÑ ³×Æ®¿÷¼­¹öÀÇ Á¦ÀÛÀº ´Ù¸¥ ¹®¼­¸¦ ÅëÇØ¼­ ºü¸¥½Ã°£³»¿¡? Á¦°øÇϵµ·Ï ÇϰڴÙ.

3 °ü·Ã ±Û


category_system
programing
category__4

Cache Error
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.