Why epoll_event only have 32bit pointer when getted from epoll_wait

Viewed 65

I have func1 that add event: c++

func1(args...) {
    //....do something.....
    struct epoll_event ev;
    ev.events = events;
    ev.data.ptr = (void*)(*s); // s is own data.
    printf("add io event address is %p seted is %p\n", *s, ev.data.ptr);

    return epoll_ctl(epollfd, EPOLL_CTL_ADD, fd, &ev);
}

but when i use epoll_wait int func2, struct epoll_event only get half pointer address:

func2(args...) {
    // ....do someting....
    int cnt = epoll_wait(event->epollfd, event->events, MAX_EVENT_EACH_LOOP, usec);
    if (cnt > 0) {
        event->status = SD_EVENT_INITIAL;
        printf("epoll wait get %p %p\n", static_cast<sd_event_source *>(event- 
        >events[0].data.ptr), (void *)event->events[0].data.u32);
        event->event_cnt = cnt;
    }
/// do someting
return cnt;

stdout info:

add io event address is 0x564fb2801470 seted is 0x564fb2801470
epoll wait get 0xb2801470 0xb2801470
1 Answers

cross compile issues, i link wrong arch version *.so.(arm64 instead of arm)

Related