SELECT

Section: ¸®´ª½º ÇÁ·Î±×·¡¸Ó ¸Å´º¾ó (2)
Updated: 1996³â 2¿ù 11ÀÏ
Index
Return to Main Contents
 

À̸§

select, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - µ¿±âÀû I/O ´ÙÁßÈ­  

»ç¿ë¹ý

#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>

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

¼³¸í

select ´Â »óÅ°¡ º¯°æµÇ´Â ÆÄÀÏ ±â¼úÀÚµéÀÇ ¼ýÀÚ¸¦ ±â´Ù¸°´Ù.

¼¼°³ÀÇ µ¶¸³ÀûÀÎ ÆÄÀÏ ±â¼úÀÚ ÁýÇÕµéÀ» °Ë»çÇÑ´Ù. 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 ´Â ¹«ÇÑÈ÷ ºÀ¼âµÉ¼ö ÀÖ´Ù.  

¹Ýȯ°ª

¼º°ø½Ã, select ´Â ÆÄÀÏ ±â¼úÀÚ ÁýÇÕ¿¡ Æ÷ÇÔµÈ ±â¼úÀÚµéÀÇ ¼ýÀÚ¸¦ ¹ÝȯÇϸç, ¾î¶°ÇÑ ÀÏÀÌ ÀϾ±â Àü¿¡ ŸÀӾƿôÀÌ ¹ß»ýÇϸé 0À» ¹ÝȯÇÑ´Ù. ¿¡·¯½Ã, -1ÀÌ ¹ÝȯµÇ¸ç, errno ´Â Àû´çÇÑ °ªÀ¸·Î ¼³Á¤µÈ´Ù.; ÁýÇÕµé°ú timeout Àº Á¤ÀÇ°¡ ¾ÈµÇ¸ç, ±×·¡¼­ ¿¡·¯ÈÄ À̰͵éÀÇ ³»¿ë¿¡ ÀÇÁöÇÒ¼ö ¾ø´Ù.  

¿¡·¯

EBADF
À¯È¿ÇÏÁö ¾ÊÀº ÆÄÀÏ ±â¼úÀÚ°¡ ÁýÇÕÁß Çϳª¿¡ µé¾î ÀÖ´Ù.
EINTR
ºñ-ºí·°µÈ ½ÅÈ£°¡ ÀâÇû´Ù.
EINVAL
n ÀÌ À½¼öÀÌ´Ù.
ENOMEM
select °¡ ³»ºÎ Å×À̺íµéÀ» À§ÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ¼ö ¾ø´Ù.
 

ÁÖÀÇ

¸î¸î ÄÚµåµéÀº Á¤È®¼ºÀ» °¡Áö°í Àẹ½ÃÅ°±â À§ÇØ ²Ï ȣȯµÇ´Â ¹æ¹ýÀ¸·Î½á ¼¼°³ÀÇ ÁýÇÕÀ» ºñ¿ì°í, n Àº 0, ±×¸®°í timeout Àº nullÀÌ ¾Æ´Ï°Ô ¼³Á¤ÇÏ¿© 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);
}
 

ȣȯ

4.4BSD ( select ÇÔ¼ö´Â 4.2BSD¿¡¼­ óÀ½ ³ªÅ¸³µ´Ù.). ÀϹÝÀûÀ¸·Î BSD ¼ÒÄÏ Ãþ(System V º¯Á¾µéÀ» Æ÷ÇÔÇÏ¿©)ÀÇ º¹»çÆǵéÀ» Áö¿øÇÏ´Â non-BSD°è¿­°ú ȣȯµÈ´Ù. ±×·¯³ª, System V º¯Á¾µéÀº ÀüÇüÀûÀ¸·Î Á¾·áÀü¿¡ timeout º¯¼ö¸¦ ¼³Á¤ÇÏÁö¸¸, BSD º¯Á¾µéÀº ±×·¸°Ô ÇÏÁö ¾Ê´Â´Ù´Â°ÍÀ» ÁÖÀÇÇضó.  

°ü·Ã Ç׸ñ

accept(2), connect(2), poll(2), read(2), recv(2), send(2), write(2)  

¿ªÀÚ

Á¤°­ÈÆ <skyeyes@soback.kornet.net>, 2000³â 7¿ù 1ÀÏ


 

Index

À̸§
»ç¿ë¹ý
¼³¸í
¹Ýȯ°ª
¿¡·¯
ÁÖÀÇ
¿¹Á¦
ȣȯ
°ü·Ã Ç׸ñ
¿ªÀÚ

This document was created by man2html, using the manual pages.
Time: 08:07:00 GMT, March 25, 2004