Сгруппируйте несколько файловых дескрипторов в один «виртуальный» файловый дескриптор для экспорта FD через API - PullRequest
1 голос
/ 08 ноября 2019

Если у подсистемы есть возможности обработки событий, то в мире Unix / Linux принято добавлять вызов API к этой подсистеме, чтобы позволить раскрыть дескриптор файла, чтобы указанная обработка событий могла быть интегрирована в существующие mainloops, которые используют что-токак опрос () или выберите (). Например, в Wayland есть wl_display_get_fd (). Если этот FD проявляет активность, можно вызывать wl_display_read_events () и друзей.

Это работает тривиально, если внутри этой подсистемы имеется ровно один FD. Но что, если есть несколько FD, которые нужно отслеживать для событий?

Я вижу только два решения:

  1. Expose all FD. Однако я не знаю ни одного API, который бы это делал.
  2. Раскрыть какой-то "виртуальный" FD, который каким-то образом связан с внутренними, "реальными" FD. Как только реальный FD получает данные и помечается как читаемый, то и виртуальный FD тоже. Как только настоящий FD может быть записан, виртуальный FD автоматически помечается как доступный для записи и т. Д.

# 2 звучит для меня чище. Возможно ли это сделать? Или есть лучшие способы справиться с этим?

...