2012-04-04 10 views
5

selectepoll으로 바꾸려면 멀티 스레드 Linux-2.6.32 + 응용 프로그램을 다시 작성하고 있습니다. 플래그가 사용되지 않는 크기 인수가 삭제 사실이 아닌 다음 0 인 경우epoll_create() 대신 epoll_create1()을 사용하면 어떤 이점이 있습니까?

, epoll_create1은() epoll_create로() 동일합니다 : epoll_create1(2)에 대한

매뉴얼 페이지가 있음을 선언합니다.

는하지만, maxeventsepoll_wait(2)에 사용이 되지 않는 크기 인수 아닌가요?

epoll_wait(int epfd, struct epoll_event *events, 
        int maxevents, int timeout); 

이것은 epoll 파일을 사용할 때 우리가 epoll_create1에서 최대 이벤트 수를 선언 피할 수 있지만, 조만간 우리가 epoll_wait를 호출 할 때이를 참조해야 의미? 그렇다면 게임에 epoll_create1을 가져 오는 것은 무엇입니까?

이 주제에 대해 알려 주셔서 감사합니다.

답변

6

아니요, epoll_wait과 함께 maxevents은 회신 할 수있는 최대 이벤트 수를 나타냅니다. . 커널 내에서 유지 관리되는 노드 수와 아무 관련이 없습니다.

이전 버전의 epoll_create은 특정 제한을 설정하는 데 크기를 사용했지만 더 이상 사용되지 않으므로 size 인수는 더 이상 사용되지 않습니다.

epoll_create1의 장점은 플래그를 지정할 수 있다는 것입니다. 플래그를 지정할 수있게되어 현재 close-on-exec로 제한되어 있기 때문에 다른 프로세스를 수행 할 때 파일 설명자가 자동으로 닫힙니다.

+0

감사 총 FD 수를하지 계산 이. 'epoll_create1'에서 저는 커널 자체가 내부 구조라고 차원을 정하게했습니다. 나는'maxevents' 매개 변수도 삭제 될 것이라고 생각했지만 사실이 아닙니다. – noisebleed

1

epoll_create1()은 플래그를 설정하는 방법을 제공합니다. 크기를 지금 설정하는 것은 불필요합니다. 커널 소스 코드에서 실제로

: /fs/eventpoll.c

SYSCALL_DEFINE1(epoll_create, int, size) 
{ 
    if (size <= 0) 
     return -EINVAL; 

    return sys_epoll_create1(0); 
} 

max_events가 수익을 제어하기위한입니다 epoll_wait() paramete가 FD 전체 eventpoll 구조체에 설명

+0

좋아, 이제'epoll_create'의'size' 인자와'epoll_wait'의'maxevents'는 같은 것이 아니라는 것을 알았습니다. 감사. – noisebleed

관련 문제