ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • epoll 함수와 구조체에 대해서 알아보자
    C_C++ 프로그래밍 2019. 6. 8. 20:40

          로재의 개발 일기      

    epoll?

     select나 poll과 비슷하게 관심 있는 파일 디스크립터를 모두 등록하고 이벤트 발생을 감지하는 것에는 차이는 없지만

    epoll은 사건이 발생한 fd들만의 구조체 배열을 셋팅하여 관리한다.

    =>  상태 변화에 대해서 일일이 확인이 필요한 전체 파일 디스크립터를 대상으로 반복문을 돌려 일일이 확인할 필요가 없다

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef union epoll_data{
        void *ptr;
        int fd;            // 이벤트가 일어나게 될 파일 디스크립터
        _unit32_t u32;
        _unit64_t u64;
    } epoll_data_t;
     
     
    struct epoll_event{
        __unit32_t events;    // 관찰한 이벤트
        epoll_data_t data;
    }
    cs




    epoll_create (파일 디스크립터의 저장소를 생성한다)-> epoll_ctl (관찰 대상을 등록) -> epoll_wait (변화를 대기한다)

      epoll_create

    1
    2
    #include<sys/epoll.h>
    int epoll_create(int size)
    cs

    성공 : epoll 파일 디스크립터 반환

    실패 : -1 반환



      epoll_ctl

    1
    2
    #include<sys/epoll.h>
    int epoll_ctl(int epfd, int op, struct epoll, struct epoll_event *event);
    cs

    epfd : 상태 변화를 등록할 epoll 인스턴스의 파일 디스크립터

    op  : 등록하거나 삭제하거나 이벤트 상황을 변경할 수 있다.

    EPOLL_CTL_ADD : 파일 디스크립터를 epoll에 등록한다.

    EPOLL_CTL_DEL : 파일 디스크립터를 epoll에서 삭제한다.

    EPOLL_CTL_MOD : 등록된 파일 디스크립터의 이벤트 발생 상황을 변경

    fd : 등록할 관찰 대상의 파일 디스크립터

    event : 관찰 대상의 관찰 이벤트 유형



      epoll_wait

    1
    2
    #include<sys/epoll.h>
    int epoll_wait(int epfd, struct epoll_event *event, int maxevents, int timeout);
    cs


    epfd : 이벤트 발생의 관찰 영역인 epoll 인스턴스의 파일 디스크립터
    events : 이벤트가 발생한 파일 디스크립터가 채워 질 버터의 주소의 값
    maxevents : 두 번째 인자로 전달된 주소 값의 버퍼에 등록 가능한 최대 이벤트
    timeout : 1/1000초 단위의 대기 시간, -1 전달 시 이벤트가 발생할 때까지 무한 대기

    성공 :  준비된 파일 디스크립터 수 리턴
    0 : 타임아웃
    -1 : 에러


    참고


    ※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다


    반응형
Designed by Tistory.