NAME

epoll_create, epoll_create1 - epoll 파일 디스크립터 열기

SYNOPSIS

#include <sys/epoll.h>

int epoll_create(int size);
int epoll_create1(int flags);

DESCRIPTION

epoll_create()epoll(7) 인스턴스를 새로 만든다. 리눅스 2.6.8부터는 size 인자를 무시하는데, 그래도 0보다는 커야 한다. NOTES 참고.

epoll_create()은 새 epoll 인스턴스를 가리키는 파일 디스크립터를 반환한다. 이후의 epoll 인터페이스 호출 모두에 이 파일 디스크립터가 쓰인다. epoll_create()가 반환한 파일 디스크립터가 더이상 필요치 않으면 close(2)로 닫아야 한다. epoll 인스턴스를 가리키는 모든 파일 디스크립터가 닫혔을 때 커널에서 그 인스턴스를 파기하고 관련 자원을 해제한다.

epoll_create1()

flags가 0인 경우에는 구식 size 인자가 없어졌다는 점을 빼면 epoll_create1()epoll_create()이 동일하다. flags에 다음 값을 포함시켜서 다른 동작 방식을 얻을 수 있다.

EPOLL_CLOEXEC
새 파일 디스크립터에 exec에서 닫기(FD_CLOEXEC) 플래그를 설정한다. 이게 유용할 수 있는 이유에 대해선 open(2)O_CLOEXEC 플래그 설명을 보라.

RETURN VALUE

성공 시 이 시스템 호출들은 파일 디스크립터(음수 아닌 정수)를 반환한다. 오류 시 -1을 반환하며 오류를 나타내도록 errno를 설정한다.

ERRORS

EINVAL
size가 양수가 아니다.
EINVAL
(epoll_create1()) flags에 유효하지 않은 값을 지정했다.
EMFILE
/proc/sys/fs/epoll/max_user_instances에 의한 epoll 인스턴스 개수에 대한 사용자별 제한에 걸렸다. 자세한 내용은 epoll(7) 참고.
EMFILE
열린 파일 디스크립터 개수에 대한 프로세스별 제한에 도달했다.
ENFILE
열린 파일 총개수에 대한 시스템 전역 제한에 도달했다.
ENOMEM
커널 객체를 생성하기에 메모리가 충분하지 않았다.

VERSIONS

커널 버전 2.6에서 epoll_create()이 추가되었다. glibc 버전 2.3.2부터 라이브러리 지원을 제공한다.

커널 버전 2.6.27에서 epoll_create1()이 추가되었다. glibc 버전 2.9부터 라이브러리 지원을 제공한다.

CONFORMING TO

epoll_create()epoll_create1()은 리눅스 전용이다.

NOTES

초기 epoll_create() 구현에서 size 인자는 호출자가 그 epoll 인스턴스에 추가할 것으로 예상하는 파일 디스크립터 수를 커널에게 알려주기 위한 것이었다. 커널에서 내부의 이벤트 집합 자료 구조를 처음 할당할 때 크기에 대한 힌트로 그 정보를 사용했다. (호출자가 실제 사용 시에 size로 준 힌트를 초과하면 커널에서 추가로 공간을 할당했다.) 요즘은 (힌트 없이도 커널에서 필요한 자료 구조 크기를 동적으로 조정하므로) 그 힌트가 더이상 필요치 않다. 하지만 size가 여전히 0보다 커야 하는데, 새 epoll 응용이 이전 커널에서 돌 때 하위 호환성을 보장하기 위해서다.

SEE ALSO

close(2), epoll_ctl(2), epoll_wait(2), epoll(7)


2021-03-22