1
나는 epoll을 container_of로 설정하는 방법을 궁금해했다. 나는 eclipse-cdt (gcc)와 함께 최신 버전의 우분투를 사용하고있다. 내 생각은 이벤트를 잡아서 이벤트가 발생한 컨테이너를 가져 오는 것입니다.C++ epoll with container_of
내가 지금과 같은 구조체가있는 경우 : 다음
struct client {
int s;
struct epoll_event e;
}foo;
과 ... :
struct epoll_event *events = NULL;
struct client *c = NULL;
foo.s = (socket);
int efd = epoll_create1(0);
foo.e.data.fd = foo.s;
foo.e.events = EPOLLIN;
epoll_ctl (efd , EPOLL_CTL_ADD , foo.s , &foo.e);
events = (struct epoll_event*)calloc (XXX , sizeof event);
while(1) {
int n = epoll_wait (efd , events , XXX , -1);
for (int i = 0 ; i < n ; i++) {
c = container_of (events[i] , client , e);
어떻게 이런 일을 할 수 있습니까? 감사!
올바르게 이해하고 있다면 events [0] (이벤트)가 "struct epoll_event"가 아닌가요? 나는 container_of가 어떻게 작동하는지보고, 내가하고 싶은 것을 어떻게 성취 할 수 있는지 생각하고 있니? – User
@Ohmages'events [0]'은 _pointer_가 아닙니다. 더 중요한 것은 '클라이언트'구조의 멤버에 대한 포인터가 아니라는 것입니다. –
아, 알았어. 흠. 글쎄요, 이것은 분명히 도로에 충돌을 일으 킵니다. 나는 내가 원하는 것을 할 수있는 일종의 방법이 있기를 바랐다. 당신의 응답을 주셔서 감사합니다. 내가보고 싶었던 것은 아니지만, 적어도 container_of는 모두 삭제되었습니다. :) – User