POLL(2)

이름
poll - 파일 기술자에서 어떠한 이벤트를 기다린다.

사용법
#include <sys/poll.h>

int poll(struct pollfd *ufds, unsigned int nfds, int timeout);

설명
poll 은 select와 같은 맥락의 기능을 가진 변형함수이다. 다음은 nfds 구조체 타입의 배열과
        struct pollfd {
                int fd;           /* 파일 기술자 */
                short events;     /* 요구된 이벤트 */
                short revents;    /* 반환된 이벤트 */
        };
밀리초인 timeout 을 기술한다. 음수값은 제한되지 않은 타임 아웃을 의미한다. fd 필드는 열려진 파일 기술자를 포함한다. events 필드는 응용 프로그램이 기다리고 있는 이벤트를 지정한 비트 마스크된 입력 파라미터이다. revents 필드는 요구된 타입의 이벤트이거나 POLLERR 또는 POLLHUP 또는 POLLNVAL타입의 이벤트 중 하나가 실제로 일어났을 때 이벤트를 가진 커널에 의해 채워진 출력 파라미터이다. (이 세개의 비트들은 events 필드에서는 의미가 없으며 상응하는 조건이 참일 때만 revents 필드에 설정된다.) 요구된 이벤트 중 어떤 것도 파일 기술자 중에서 일어나지 않는다면, 커널은 이 이벤트들 중 하나가 일어나기를 timeout 밀리초동안 기다린다. 이들 비트마스크 중에서 다음 가능한 비트들이 <sys/poll.h>에 정의되어 있다.
    #define POLLIN      0x0001    /* 읽을 데이터가 있다 */
    #define POLLPRI     0x0002    /* 읽을 긴급한 데이터가 있다 */
    #define POLLOUT     0x0004    /* 쓰기가 지금 봉쇄가 아니다 */
    #define POLLERR     0x0008    /* 에러 조건 */
    #define POLLHUP     0x0010    /* 실행중지 또는 재시작 */
    #define POLLNVAL    0x0020    /* 무효한 요구: fd가 열려지지 않았다 */
<asm/poll.h> 에는 또한 POLLRDNORM, POLLRDBAND, POLLWRNORM, POLLWRBAND 값들과 POLLMSG 가 정의되어 있다.

반환값
성공시, 양수 값이 반환되며 반환된 숫자는 revents 필드가 가지고 있는 구조체의 숫자이다. (다시 말해서, 보고된 이벤트들이나 에러들을 가지고 있는 이들 파일 기술자) 0 은 호출이 타임 아웃이 걸렸고 어떤 파일 기술자도 선택되지 않았음을 가리킨다. 에러이면 -1이 리턴되며 errno 는 적당한 값으로 설정된다.

에러

ENOMEM
    파일 기술자 테이블을 할당할 공간이 없다.

EFAULT
    인자로 주어진 배열이 호출 프로그램의 주소 공간에 포함되어 있지 않다.

EINTR
    요구된 이벤트 전에 신호가 발생했다.

호환
XPG4-UNIX.

유효성
poll() 시스템 콜은 Linux 2.1.23에 소개되었다. poll() 라이브러리 함수는 libc 5.4.28 에 소개 되었다. (그리고 여러분의 커널이 poll 시스템 콜을 가지고 있지 않다면 select 를 사용한 에뮬레이션을 제공한다.)

관련 항목
select(2)

번역
정강훈 <skyeyes@soback.kornet.net> 2000년 8월 6일
한글 Manpage 프로젝트 (http://man.kldp.org) 2005년 2월 15일