select

ëªì¹
     select — ë기ì ì¸ ìì¶ë ¥ì ë¤ì¤í

íë¡ê·¸ë¨ ë¼ì´ë¸ë¬ë¦¬
     Standard C Library (libc, -lc)

ìì
     <sys/types.h> <sys/time.h> <unistd.h> int select(int nfds, fd_set
     *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
     FD_SET(fd, &fdset) FD_CLR(fd, &fdset) FD_ISSET(fd, &fdset)
     FD_ZERO(&fdset)

í´ì¤
     select() (ì)ë, readfds, writefds ë° exceptfds ê·¸ë¦¬ê³  주ì를 ê±´ë¤ë°ì
     ìì¶ë ¥ 기ì ì ì§í©ì ì¡°ì¬í´ ê·¸ë¬í 기ì ìì ëªê°ì¸ê°ê° ê°ê°, ì½ê¸° ì¤ë¹
     ìë£ì¸ì§, ê¸°ë¡ ì¤ë¹ ìë£ì¸ì§, ëë ë³´ë¥ëê³  ìë ìì¸ ì¡°ê±´ì´ ììê¹ë¥¼
     ì¡°ì¬í©ëë¤.  ê²ì¶ ê°ë¥í ì ì¼í ìì¸ ì¡°ê±´ì, ìì¼ìì ìì í ëìì¸ì ë°ì´í°ìëë¤.
     ìµì´ì nfds ê°ì 기ì ìê° ê° ì§í©ë´ìì ì²´í¬ë©ëë¤. ì¦, 기ì ì ì§í©ì¤ìã 0 ~
     nfds-1 ì 기ì ìê° ì¡°ì¬í  ì ììµëë¤. ê·ê°ìì select() (ì)ë ì§ì ì 기ì ì
     ì§í©ì, ì구ë ì¡°ìì ì¤ë¹ê° ëì´ ìë 기ì ìë¡ êµ¬ì±ëë ë¶ë¶ ì§í©ì¼ë¡
     ì®ê²¨ëìµëë¤.  select() (ì)ë, ëª¨ë  ì§í© ì¤(ì)ìì ì¤ë¹ë¥¼ í  ì ìë 기ì ìì
     ì´ì를 ëë ¤ì¤ëë¤.

     기ì ìì ì§í©ì, ì ì ë°°ì´ë´ì ë¹í¸ íëë¡ì ë³´ì¡´ë©ëë¤.  ì´ë¬í 기ì ì ì§í©ì
     ì¡°ìí기 ìí´ì ë¤ìì 매í¬ë¡ê° ì¤ë¹ëì´ ììµëë¤.  FD_ZERO(&fdset) (ì)ë 기ì ì
     ì§í© fdset (ì)를 íë ì§í©ì¼ë¡ ì´ê¸°íí©ëë¤.  FD_SET(fd, &fdset) (ì)ë í¹ì ì
     기ì ì fd (ì)를 fdset ì í¬í¨í©ëë¤.  FD_CLR(fd, &fdset) í fd (ì)를 fdset
     (ì¼)ë¡ë¶í° ìì í©ëë¤.  FD_ISSET(fd, &fdset) í fd íì§ë§ fdset ì 멤ë²ì¸
     ê²½ì°ë ë¹ 0 ì ê°ì, ê·¸ë ì§ ìì ê²½ì°ë 0 ì ëë ¤ì¤ëë¤.  ì´ë¬í 매í¬ë¡ì ëìì,
     기ì ìì ê°ì´ 0 미ë§ì¸ì§, ëë FD_SETSIZE ì´ìì¸ ê²½ì°ë 미ì ë리ìëë¤.
     FD_SETSIZE (ì)ë íµì, ì ì´ë, ìì¤íì´ ìí¬í¸íë 기ì ìì ìµëìì ëì¼í´ì§ëë¤.

     timeout íì§ë§, ë르í¬ì¸íê° ìë ê²½ì°, ê·¸ê²ì ìë ìì ìë£ë¥¼ 기ë¤ë¦¬ë ìµë
     ì¸í°ë²ì ì§ì í©ëë¤.  ìì¤íì íëì±ì´, ì´ ì¸í°ë²ì ë¶ì  ìê° ì°ì¥íë ì¼ì´ ììµëë¤.

     timeout íì§ë§ ë르í¬ì¸íì ê²½ì°, select() (ì)ë 무기íì¼ë¡ ë¸ë¡ í©ëë¤.

     í´ë§ì ìí´ì(ë문ì)ë, timeout ì¸ìë ëì´ ìëê³ , ê°ì´ 0 ì timeval 구조체를
     ê°ë¦¬í¤ê³  ìì´ì¼ í©ëë¤.

     readfds, writefds ë° exceptfds ì ì´ë ê²ì¼ë¡ ë¶ì´ë, ì´ë 기ì ìë í¥ë¯¸ê° ìë
     ê²½ì°ë ë르í¬ì¸í를 ì§ì í  ì ììµëë¤.

ë°íê°
     select() (ì)ë 기ì ì ì§í©ì í¬í¨ëì´ ìì ì¤ë¹ë¥¼ í  ì ìë 기ì ìì ì를
     ëë ¤ì£¼ì´, ìë¬ê° ì¼ì´ë¬ì ê²½ì°ë -1 ì ëë ¤ì¤ëë¤.  ìíì´ ì¤ë©´(ì), select()
     (ì)ë 0 ì ëë ¤ì¤ëë¤.  ì¸ì¹ê¸°ì ìíë ê²ë í¬í¨í´ select() íì§ë§ ìë¬ë¡ ëìì¤ë
     ê²½ì°ë, 기ì ì ì§í©ì ë³ê²½ëì§ ììµëë¤.

ìë¬
     select() (ì¼)ë¡ë¶í° ëìì¤ë ìë¬ë ë¤ì ì¼ì ëíëëë¤.

     [EBADF]            기ì ì ì§í©ì ì´ë¤ ê²ì¸ê°ê° 무í¨ì¸ 기ì ì를 ì§ì í´
                        ìììµëë¤.

     [EINTR]            ìíì´ ëì´ì§ê¸° ì  í¹ì ì íí ì´ë²¤í¸ì¤ íìª½ì´ ì¼ì´ë기
                        ì ì, ìê·¸ëì´ ë°°ì¡ëììµëë¤.

     [EINVAL]           ì§ì ì ìíì 무í¨ìëë¤.  ì´ë¤ ê²ì¸ê°ê° ë¶ì¸ì§, ëë ë무
                        í½ëë¤.

     [EINVAL]           nfds íì§ë§ 무í¨ììµëë¤.

ê´ë ¨ í목
     accept(2), connect(2), getdtablesize(2), gettimeofday(2), read(2),
     recv(2), send(2), write(2), clocks(7)

주
     FD_SETSIZE ì ëí´í¸ì ì¬ì´ì¦ë íìì ììëã 1024 ìëë¤.  ë¤ìì ì¤í íì¼ì ì¬ì©í
     ê°ë¥ì±ì´ ìë íë¡ê·¸ë¨ì¼ë¡ select() (ì)를 ì¤íí기 ìí´ì, ⟨sys/types.h⟩
     (ì)를 ìì¤ì ë£ë í¤ë를 í¬í¨í기 ì ì íë¡ê·¸ë¨ì¼ë¡ FD_SETSIZE (ì)를 ì ìíë
     ê²ì¼ë¡, ì´ ì¬ì´ì¦ë¥¼ ì¦ê°í  ì ììµëë¤.

     nfds íì§ë§ ì¤í íì¼ì ìë³´ë¤ í° ê²½ì°, select() íì§ë§ 미ì¬ì©ì íì¼
     기ì ì를 ì¡°ì¬íë ê²ì íë¡íìëê³  ìì§ ììµëë¤.  ìì¬ì ì¸ ì´ì ë¡, select()
     (ì)ë ìµì´ì 256 ê°ì 기ì ì를 ë°ëì ì¡°ì¬í©ëë¤.

ë²ê·¸
     Version 2 of the Single UNIX Specification (“SUSv2”) ê·¸ë¼, ìì¤íì´ ìëì
     timeout 를 ì ë¹íê² ê°±ì íë ê²ì íë½íê³  ììµëë¤.  ë°ë¼ì, íì ììì ê°ì´
     select() í¸ì¶ì ìí´ ë³ê²½ëì§ ìì¼ë©´ ìì íë ê²ì íëªíì§ë ììµëë¤.

ìì¬
     select() í¨ìë 4.2BSD ê·¸ë¦¬ê³  ë±ì¥íìµëë¤.