int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
FD_CLR(int fd, fd_set *set);
FD_ISSET(int fd, fd_set *set);
FD_SET(int fd, fd_set *set);
FD_ZERO(fd_set *set);
¼¼°³ÀÇ µ¶¸³ÀûÀÎ ÆÄÀÏ ±â¼úÀÚ ÁýÇÕµéÀ» °Ë»çÇÑ´Ù. readfds ¿¡ ¸®½ºÆ®µÈ °ÍµéÀº ¹®ÀÚµéÀ» ÀоîµéÀϼö Àִ°¡°¡ °Ë»çµÇ¸ç(´õ Á¤È®È÷´Â, ÀбⰡ ºÀ¼âµÇÁö ¾Ê¾Ò´ÂÁö¸¦ °Ë»çÇϱâ À§ÇؼÀÌ´Ù - Ưº°È÷, ÆÄÀÏ ±â¼úÀÚ ¶ÇÇÑ end-of-file Àϼöµµ ÀÖ´Ù.), writefds ¿¡ ÀÖ´Â °ÍµéÀº ¾²±â°¡ ºÀ¼âµÇÁö ¾Ê¾Ò´Â°¡°¡ °Ë»çµÇ¸ç exceptfds ¿¡ ÀÖ´Â °ÍµéÀº ¿¹¿Ü°¡ ÀÖ´ÂÁö°¡ °Ë»çµÈ´Ù. Á¾·á½Ã, ÀÌ ÁýÇÕµéÀº ÆÄÀÏ ±â¼úÀÚµéÀÌ ½ÇÁ¦·Î º¯°æµÈ »óÅ°¡ ¹«¾ùÀÎÁö °¡¸®Å°µµ·Ï ¼öÁ¤µÈ´Ù.
³×°³ÀÇ ¸ÅÅ©·Î°¡ ÀÌ ÁýÇÕµéÀ» Á¦¾îÇϱâ À§ÇØ »ç¿ëµÈ´Ù. FD_ZERO ´Â ÁýÇÕÀ» ¼Ò°ÅÇÑ´Ù. FD_SET ¿Í FD_CLR ´Â ÁýÇÕ¿¡¼ ÁÖ¾îÁø ±â¼úÀÚ¸¦ ´õÇϰųª »«´Ù. FD_ISSET ´Â ±â¼úÀÚ°¡ ÁýÇÕÀÇ ÀϺκÐÀÎÁö ¾Æ´ÑÁö¸¦ °Ë»çÇÑ´Ù.: ÀÌ°ÍÀº select °¡ ¹ÝȯµÈÈÄ À¯¿ëÇÏ´Ù.
n Àº ¼¼°³ÀÇ ÁýÇÕÁß °¡Àå ³ôÀº ÆÄÀϱâ¼úÀÚ¿¡´Ù°¡ 1À» ´õÇÑ´Ù.
timeout Àº select °¡ ¹ÝȯÇϱâ Àü¿¡ °æ°úÇØ¾ß ÇÏ´Â ½Ã°£ÀÇ »óÀ§ Á¦ÇÑ °ªÀÌ´Ù. 0À¸·Î ÁöÁ¤µÇ¸é select ´Â Áï½Ã ¹ÝȯµÈ´Ù. ¸¸ÀÏ timeout ÀÌ NULLÀ̸é(timeoutÀÌ ¾øÀ»°æ¿ì), select ´Â ¹«ÇÑÈ÷ ºÀ¼âµÉ¼ö ÀÖ´Ù.
¸®´ª½º¿¡¼, timeout Àº ÀẹµÇÁö ¾ÊÀº ½Ã°£ÀÇ ¾çÀ» ¹Ý¿µÇϱâ À§ÇØ ¼öÁ¤µÈ´Ù; ´ëºÎºÐÀÇ ´Ù¸¥ ¼öÇàµéÀº ÀÌ·¸°Ô µÇÁö ¾Ê´Â´Ù. ÀÌ°ÍÀº timeout À» ÀÐÀº ¸®´ª½º ÄÚµåµéÀÌ ´Ù¸¥ OS·Î Æ÷Æõǰųª ÄÚµåµéÀÌ Ãʱâȸ¦ ´Ù½Ã ÇÏÁö ¾Ê°í ¹Ýº¹¹®¿¡¼ ´ÙÁß selects ¸¦ À§ÇØ timeval ±¸Á¶Ã¼¸¦ ´Ù½Ã »ç¿ëÇÏ¿© ¸®´ª½º·Î Æ÷ÆÃÇÒ¶§ ¹®Á¦µéÀ» ¾ß±âÇÑ´Ù. select ¿¡¼ ¹ÝȯµÈÈÄ Á¤ÀǵÇÁö ¾ÊÀº timeout À» °í·ÁÇØ¾ß ÇÑ´Ù.
#include <stdio.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int main(void) { fd_set rfds; struct timeval tv; int retval; /* ÀԷµȶ§¸¦ ¾Ë¾Æº¸±â À§ÇØ stdin (fd 0)À» °Ë»çÇÑ´Ù. */ FD_ZERO(&rfds); FD_SET(0, &rfds); /* 5Ãʸ¦ ±â´Ù¸°´Ù. */ tv.tv_sec = 5; tv.tv_usec = 0; retval = select(1, &rfds, NULL, NULL, &tv); /* Áö±Ý tv °ª¿¡ ÀÇÁ¸ÇÏÁö ¸¶¶ó. */ if (retval) printf("Data is available now.\n"); /* FD_ISSET(0, &rfds) ´Â trueÀÌ´Ù. */ else printf("No data within five seconds.\n"); exit(0); }