-
epoll 함수와 구조체에 대해서 알아보자C_C++ 프로그래밍 2019. 6. 8. 20:40
epoll?
select나 poll과 비슷하게 관심 있는 파일 디스크립터를 모두 등록하고 이벤트 발생을 감지하는 것에는 차이는 없지만epoll은 사건이 발생한 fd들만의 구조체 배열을 셋팅하여 관리한다.
=> 상태 변화에 대해서 일일이 확인이 필요한 전체 파일 디스크립터를 대상으로 반복문을 돌려 일일이 확인할 필요가 없다
123456789101112typedef 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
12#include<sys/epoll.h>int epoll_create(int size)cs 성공 : epoll 파일 디스크립터 반환
실패 : -1 반환
epoll_ctl
12#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
12#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 : 에러참고
※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다
반응형'C_C++ 프로그래밍' 카테고리의 다른 글
[Window Thread] 윈도우에서 쓰레드 간단한 예시 (0) 2019.06.25 매우 큰 텍스트 파일 만들기 (0) 2019.06.19 fseek와 lseek 사용 정리 +ftell (0) 2019.06.06 sscanf와 sprintf에 대해서 알아보자 (0) 2019.06.04