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);
}