ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. 1 ÀÔÃâ·Â ´ÙÁßÈ1.1 ÀÔÃâ·Â ´ÙÁßÈ ¸ðµ¨
ÀÔÃâ·Â°ú °ü·ÃµÈ ÇÔ¼öµéÀº ±âº»ÀûÀ¸·Î ºÀ¼â/µ¿±âÀû À¸·Î ÀÛµ¿ÇÑ´Ù. ºÀ¼âÇüÀº µ¥ÀÌÅ͸¦ ó¸®ÇÏ´Â Á÷°üÀûÀÎ ¹æ½ÄÀ̱ä ÇÏÁö¸¸, µÎ °³ ÀÌ»óÀÇ ÆÄÀÏÀ» ó¸®ÇÒ ¶§ ¹®Á¦°¡ µÈ´Ù. ÇϳªÀÇ ÆÄÀÏ¿¡¼ ºÀ¼â°¡ µÇ¾î ¹ö¸®¸é ´Ù¸¥ ÆÄÀÏÀÇ µ¥ÀÌÅÍ´Â ¿µ¿øÈ÷ ÀÐÁö ¸øÇÒ ¼öµµ Àֱ⠶§¹®ÀÌ´Ù. ºñ ºÀ¼â ¹æ½ÄÀ¸·Î ó¸®ÇÏ´Â ¹æ¹ýµµ ÀÖÀ¸³ª ÀϹÝÀûÀ¸·Î ºñºÀ¼â ¹æ½ÄÀº ºÀ¼â ¹æ½Ä¿¡ ºñÇØ¼ ±î´Ù·Î¿î ÇÁ·Î±×·¡¹Ö ±â¼úÀ» ¿ä±¸ÇÑ´Ù.
ºÀ¼â/µ¿±â¼ºÀ» À¯ÁöÇÏ¸é¼ µÎ °³ ÀÌ»óÀÇ ÆÄÀÏÀ» ó¸®ÇÏ´Â ÀÏ¹Ý ÀûÀÎ ¹æ¹ýÀº ¸ÖƼ ÇÁ·Î¼¼½º¿Í ¸ÖƼ ¾²·¹µå¸¦ ÀÌ¿ëÇÑ ¹æ½ÄÀÌ´Ù. À̵é ÇÁ·Î±×·¡¹Ö ±â¼úÀº ÆÄÀÏ´ç ÇϳªÀÇ ÇÁ·Î¼¼½º(ȤÀº ¾²·¹µå)¸¦ ÇÒ´çÇØ¼ µ¿½Ã¿¡ µÎ°³ ÀÌ»óÀÇ ÆÄÀÏÀ» ó¸®ÇÑ´Ù.
ÀÌ ¹æ½ÄÀº ´Ü¼øÇØ º¸ÀÌÁö¸¸, ´ÜÀÏ ÇÁ·Î¼¼½º/´ÜÀÏ ¾²·¹µå ¹æ½ÄÀÇ ÇÁ·Î±×·¥¿¡ ºñÇØ¼ ´ÙÀ½°ú °°Àº º¹ÀâÇÑ ÇÁ·Î±×·¡¹Ö À̽´¸¦ °¡Áö°í ÀÖ´Ù.
ÀÔÃâ·Â ´ÙÁßÈ´Â ¿©·¯ °³ÀÇ ÆÄÀÏÀ» ´Ù·ç±â À§Çؼ, ÆÄÀÏ ±â¼úÀÚ¸¦ ¹è¿ (±×·ì)À¸·Î °ü¸®ÇÑ´Ù. µ¥ÀÌÅÍ º¯°æÀ» °¨½ÃÇÒ ÆÄÀÏ ±â¼úÀÚ¸¦ ¹è¿¿¡ Æ÷ÇÔ½Ã۰í, ¹è¿¿¡ Æ÷ÇÔµÈ ÆÄÀÏ ±â¼úÀÚ¿¡ (Àбâ, ¾²±â, ¿¡·¯¿Í °°Àº)µ¥ÀÌÅÍ º¯°æÀÌ ¹ß»ýÇÏ¸é ÆÄÀÏ ±â¼úÀÚ¿¡ ´ëÀÀµÇ´Â ¹è¿¿¡ Ç¥½ÃÇÏ´Â ¹æ½ÄÀÌ´Ù. °³¹ßÀÚ´Â ÆÄÀÏ ±â¼úÀÚ ¹è¿ÀÇ °ªÀ» °Ë»çÇÏ´Â °ÍÀ¸·Î ¿©·¯ °³ÀÇ ÆÄÀÏÀ» ó¸®ÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
2, 4, 8¹ø ÆÄÀÏ ±â¼úÀÚ¿¡ µ¥ÀÌÅÍ º¯È°¡ ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù.
ÀÌ ¸ðµ¨Àº ¸ðµ¨ ƯÀ¯ÀÇ Á¦ÇÑÀ» °¡Áö°í ÀÖ´Ù.
2 selectÇÔ¼ö·Î ÀÔÃâ·Â ´ÙÁßÈ
ÀÔÃâ·Â ´ÙÁßÈ´Â ¿©·¯ °³ÀÇ ÆÄÀÏ¿¡¼ ¹ß»ýÇÏ´Â ÀÔÃâ·ÂÀ» ÇÔ²² °ü¸®ÇÏ´Â ±â¼úÀÌ´Ù. ¿ø¸®´Â °£´ÜÇÏ´Ù. ÀÔÃâ·ÂÀ» °ü¸®ÇϰíÀÚ ÇÏ´Â ÆÄÀÏÀÇ ±×·ìÀ» fd_setÀ̶ó´Â ÆÄÀÏ ºñÆ® ¹è¿¿¡ Áý¾î ³Ö°í, ºñÆ® ¹è¿ÀÇ °ªÀÌ º¯Çß´ÂÁö¸¦ È®ÀÎÇÏ´Â ¹æ½ÄÀÌ´Ù.
¸®´ª½º´Â BSD selectÇÔ¼ö·Î ÀÔÃâ·Â ´ÙÁßȸ¦ ´Þ¼ºÇÑ´Ù. int select (int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
´ÙÀ½Àº selectÇÔ¼öÀÇ ¸Å°³ º¯¼ö´Ù.
¸¸¾à º¯°æµÈ µ¥ÀÌÅͰ¡ ÀÖ´Ù¸é ÇØ´ç ºñÆ®°ªÀÌ 1·Î ¼³Á¤ÀÌ µÇ°í, ÇÁ·Î±×·¥Àº ÀÌ ºñÆ® °ªÀ» °Ë»çÇÔÀ¸·Î½á ¾î¶² ÆÄÀÏ ÁöÁ¤ ¹øÈ£¿¡ º¯°æµÈ µ¥ÀÌÅͰ¡ ÀÖ´ÂÁö È®ÀÎÇØ¼ Àбâ/¾²±â¸¦ ÇÏ¸é µÈ´Ù.
select ÇÔ¼ö´Â µ¥ÀÌÅͰ¡ º¯°æµÈ ÆÄÀÏÀÇ °³¼ö Áï fd_set¿¡¼ ºñÆ® °ªÀÌ 1ÀÎ ÇʵåÀÇ °³¼ö¸¦ ¹ÝȯÇÑ´Ù. µ¥ÀÌÅͰ¡ º¯°æµÈ ÆÄÀÏÀÇ ¸ñ·ÏÀ» ¹ÝȯÇÏÁö ¾Ê´Â´Ù´Â °Í¿¡ ÁÖÀÇÇØ¾ß ÇÑ´Ù. ±×·¯¹Ç·Î ¸¸¾à ÃÖ´ë ÆÄÀÏ ÁöÁ¤ ¹øÈ£°¡ 1000 À̰í select°¡ 1À» ¹Ýȯ Çß´Ù¸é, 0¹ø ºÎÅÍ ·çÇÁ¸¦ ¼øÈ¯ÇÏ¸é¼ ¾î¶² ÆÄÀÏÀÌ º¯°æµÇ¾ú´ÂÁö¸¦ °Ë»çÇØ¾ß ÇÑ´Ù. ÃÖ¾ÇÀÇ °æ¿ì 1000¹ø ·çÇÁ¸¦ µ¹¾Æ¾ß ÇÑ´Ù. selectÀÇ ÀÛµ¿¹æ½Ä¿¡ µû¸¥ ±Ùº»ÀûÀÎ ¹®Á¦Àε¥, ¿¬°á ÆÄÀÏÀÇ ¸ñ·ÏÀ» º°µµÀÇ ¹è¿¿¡ À¯Áö ÇÏ´Â °ÍÀ¸·Î ¾î´À Á¤µµ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ±â´Â ÇÏ´Ù. (¿ÏÀüÇÑ ¹æ¹ýÀº ¾Æ´Ï´Ù. ¿¬°áµÈ ÆÄÀÏÀÌ Çϳª°í ÀÌ ÆÄÀÏÀÇ ÁöÁ¤ ¹øÈ£°¡ 1000À̶ó¸é, 1¹ø¸¸ ºñ±³ÇÒ ¼ö ÀÖÁö¸¸, ¿¬°áµÈ ÆÄÀÏÀÌ 1000À̶ó¸é ¿©ÀüÈ÷ 1000¹øÀÇ ·çÇÁ¸¦ µ¹¾Æ¾ß ÇÒ ¼ö ÀÖ´Ù.) 2.1 fd_set °ü¸®
selectÇÔ¼öÀÇ ÇÙ½ÉÀº fd_set±¸Á¶Ã¼¿¡ ÀÖ´Ù. fd_set±¸Á¶Ã¼´Â ´ÙÀ½°ú °°ÀÌ °ü¸®¿ä¼Ò°¡ ÇÊ¿äÇÏ´Ù.
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 °ü·Ã ±Û |
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|