LINUX.ORG.RU

«Связать» файловый дескриптор с указателем


0

1

Может быть я глупый вопрос задам. Потому как задачка, по идее, часто возникает, и, по идее, уже давно должна иметь «стандартное» решение. Но либо это не так, либо у меня тупняк.

Нужно в одном потоке обрабатывать много файловых дескрипторов (ФД). Делать это хочу с помощью epoll. Каждому ФД нужно «прикрепить» указатель на структуру (содержащую, например, буфер в который читаем и счётчик прочитанных байтов).

Как «прикреплять»?

С помощью ассоциативного массива? Когда нам epoll_wait скажет что можно читать из этого ФД, то обращаться к ассоциативному массиву по этому ФД и брать указатель на структуру. Или есть другой способ?

> Как «прикреплять»?

man epoll_ctl

arsi ★★★★★
()
Ответ на: комментарий от mashina

Опа, я понял. Поначалу читал пример в man epoll

...
ev.events = EPOLLIN;
ev.data.fd = listen_sock;
if (epoll_ctl(epollfd, EPOLL_CTL_ADD, listen_sock, &ev) == -1) {
...

Ещё подумал — зачем два раза listen_sock сообщать. Полюс спать хотелось. А оказывается в ev.data можно всё что хочешь запихнуть.

epoll это просто замечательная весч. Разве какой-нить select это может? Нет, не может. А уж про убогий WaitForMultipleObjects и говорить нечего.

arsi, mashina спасибо.

LinuxUser ★★★
() автор топика
Ответ на: комментарий от unsigned

Нормально. В pkgsrc патчи уже есть, можно собрать glib с нужной опцией, и оно придёт.

Только там сейчас есть один досадный баг, над которым я в данный момент работаю, и надеюсь обновить патчи к выходным. Тогда станет вообще шоколадно

yoghurt ★★★★★
()
Ответ на: комментарий от unsigned

ИМХО не слишком интересно для отчёта на ЛОРе :)

yoghurt ★★★★★
()
Ответ на: комментарий от LinuxUser

> epoll это просто замечательная весч. Разве какой-нить select это может? Нет, не может. А уж про убогий WaitForMultipleObjects и говорить нечего.

Дурачок, «конкурент» epoll'а в венде - IO Completion. И да, он может много больше, чем epoll. :3

LamerOk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.