Сабж актуален для epoll. В epoll_event.data.ptr можно сохранить указатель типа void *, который при наступлении события для файлового дескриптора будет сразу доступен и его не нужно искать.
Хочу сохранить в этом указателе адрес функции и потом эту функцию вызывать. С сохранением вроде бы всё понятно:
void event_handler() { … };
…
epoll_event.data.ptr = (void *)event_handler;
Наступившие события сохраняю в epoll_events:
epoll_wait(epoll_fd, epoll_events, EPOLL_MAX_EVENTS, -1);
Как теперь привести epoll_events[ready_fd_i].data.ptr к типу адрес функции вида „void event_handler()“?