В KEXT я прослушиваю закрытие файла через прослушиватель vnode или файловой области. Для определенных (очень немногих) файлов мне нужно отправить путь к моему системному демону, который выполняет некоторую обработку (это должно происходить в демоне) и возвращает результат обратно в KEXT. Вызов закрытия файла должен быть заблокирован, пока я не получу ответ от демона. В зависимости от результата мне нужно выполнить некоторую операцию в закрытом вызове и успешно вернуть закрытый вызов. На форуме много дискуссий по теме, связанной с коммуникацией KEXT. Но они не являются окончательными и выглядят очень старыми (приблизительно 2002 года). Это требование может быть выполнено с помощью FtlSendMessage(...)
Win32 API. Я ищу эквивалент этого на Mac
Вот что я посмотрел и хочу обобщить свое понимание:
- Машинное сообщение: обеспечивает очень хороший способ двунаправленной связи с использованием портов отправителя и ответа с механизмом очередей. Однако API-интерфейсы сообщений Mach (например,
mach_msg
,mach_port_allocate
,bootstrap_look_up
) не являются ключевыми показателями эффективности. Mach APImach_msg_send_from_kernel
можно использовать, но само по себе это не поможет в двунаправленной связи. Правильно ли я понимаю? - IOUserClient: похоже, это больше связано с общением из пользовательского пространства с KEXT, а затем с некоторыми обратными вызовами из KEXT. Я не нашел способа инициировать связь KEXT с демоном, а затем дождаться результата от демона. Я что-то упускаю?
- Сокеты: это может быть последний вариант, поскольку мне придется реализовать весь двунаправленный канал связи от KEXT до Daemon.
ioct
l/sysctl
: Я мало о них знаю. Из того, что я прочитал, это не рекомендуемый вариант, особенно для двунаправленной связи.- RPC-Mig: Опять же, я мало о них знаю. Выглядит сложным из того, что я видел. Не уверен, что это рекомендуемый способ.
- KUNCUserNotification: похоже, это просто уведомление пользователя от KEXT. Это не соответствует моему требованию.
Поддерживаемая платформа (10.5 и далее). Итак, глядя на требование, может ли кто-нибудь предложить и дать несколько советов по этой теме?
Заранее спасибо.