epoll_ctl 예제

이 첫 번째 예제에서는 epoll_create1()를 사용하여 강력한 커널에 의해 제공된 새 epoll 인스턴스에 대한 파일 설명기를 만듭니다. 그것은 아직 그것으로 아무것도 하지 않습니다 하는 동안 우리는 여전히 프로그램을 종료 하기 전에 그것을 정리 해야 합니다. 그것은 다른 리눅스 파일 설명자 처럼 때문에 우리는 그냥 사용할 수 있습니다 close () 이대. int epoll_ctl(int epfd, int op, int fd, 구조체 epoll_event *이벤트); 파일 설명자가 epoll_ctl이 다른 플래그와 함께 ORed인 epoll_ctl이 있는 epoll 인스턴스에 등록되는 실제 프로젝트의 코드에서 이 작업을 보는 것이 더 유용해질 수 있습니다. epoll_ctl – 대poll 설명자 epoll_ctl(2)에 대한 제어 인터페이스는 Linux 커널 2.5.44에 도입된 새로운 API입니다. 인터페이스는 리눅스 커널 2.5.66에 의해 마무리되어야한다. epoll_ctl을 사용하여 epoll 인스턴스의 관심 목록에 파일 설명자(예: fd0)를 추가하는 경우 실제로 epoll 인스턴스의 관심 목록에 fd0의 기본 파일 설명이 표시됩니다. 위의 예제 프로세스에서 A에는 설명자 3에 가까운 exec 플래그가 표시되어 있다고 가정해 보겠습니다. 프로세스 A 포크 가 B를 처리하는 경우, 포크 직후, 프로세스 A와 프로세스 B는 동일하며, 이러한 프로세스 B는 파일 설명자 0, 1, 2 및 3에 « 액세스 »를 갖습니다. 프로세스는 epoll_ctl을 호출하여 모니터링하려는 파일 설명기를 epoll 인스턴스에 추가할 수 있습니다.

epoll 인스턴스에 등록된 모든 파일 설명자는 집합 집합 또는 관심 목록이라고 합니다. 결론적으로, epoll_ctl은 fd를 채울 것이라는 사실에 의존 할 수 없기 때문에 별도의 명시 적 매개 변수가 있습니다. 예시적인 예제를 통해 에지 트리거 알림이 epoll에서 작동하는 방식을 더 잘 이해할 수 있습니다. 프로세스에서 epoll 인스턴스에 4개의 설명자를 등록한 이전에 사용한 예제를 사용해 보겠습니다. fd3가 소켓이라고 가정해 봅시다. epoll_ctl()을 사용할 때 세 번째 매개 변수 « fd »가 epoll 파일 설명자 « epfd »외에 다른 파일 설명자라는 것을 발견했습니다. 그리고 이런 예를 보았습니다 : 때로는 준비 여부에 관계없이 관심 목록에서 설명자 (예 : fd1)의 상태를 찾으려고 할 수 있습니다. epoll을 사용하면 에지 트리거 알림을 지원하여 특정 파일 설명자(epoll_wait 호출 시 준비가 되지 않은 경우에도)에서 I/O가 가능한지 여부를 확인할 수 있습니다. epoll_wait에 대한 이전 호출 이후 파일 설명자에서 I/O 활동이 있었는지 여부에 대한 정보를 원할 경우(또는 설명자가 열린 이후, 프로세스에서 만든 이전 epoll_wait 호출이 없는 경우) 에지 트리거 알림을 받을 수 있습니다. epoll_ctl을 호출하는 동안 ePOLLET 플래그를 ORing하여 epoll 인스턴스에 파일 설명자를 등록합니다. epoll을 사용하면 epoll_ctl 호출을 사용하여 epoll 인스턴스의 관심 목록에 파일 설명기를 추가한 다음 epoll_waitin을 미래에 호출할 때 이후에 준비 정보를 찾으려는 파일 설명기를 전달할 필요가 없습니다. 커널은 다시 I/O에 사용할 수 있는 설명자에 대한 정보만 반환하며, 커널이 전달된 모든 설명자에 대한 정보를 반환하는 선택/폴링 모델과는 대조적입니다.

epoll 인스턴스와 연결된 파일 설명자는 close() 시스템 호출을 사용하여 해제해야 합니다. 예를 들어 EPOLL_CLOEXEC 플래그가 없는 포크가 자식 프로세스의 epoll 인스턴스에 설명기를 복제하기 때문에 여러 프로세스가 동일한 epoll 인스턴스에 설명기를 보유할 수 있습니다. 이러한 모든 프로세스가 epoll 인스턴스에 대한 설명기를 포기하면(close() 호출하거나 종료하여 커널은 epoll 인스턴스를 파괴합니다.

Ce contenu a été publié dans Non classé par samuel. Mettez-le en favori avec son permalien.