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 : 에러
참고
※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다
'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 |
댓글