In KEXT lausche ich über Vnode oder Dateibereichs-Listener auf das Schließen der Datei. Für bestimmte (sehr wenige) Dateien muss ich einen Dateipfad an meinen Systemdämon senden, der etwas verarbeitet (dies muss im Daemon passieren) und gibt das Ergebnis zurück an KEXT. Das Schließen der Datei muss blockiert werden, bis ich eine Antwort vom Daemon erhalten habe. Basierend auf dem Ergebnis muss ich eine Operation in engem Call durchführen und den Close Call erfolgreich beenden. Es gibt eine Menge Diskussion über KEXT Kommunikation Thema im Forum. Aber sie sind nicht schlüssig und scheinen sehr alt zu sein (Jahr 2002 herum). Diese Anforderung kann von FtlSendMessage(...)
Win32 API behandelt werden. Ich suche Äquivalent, dass auf MacDie beste Möglichkeit, von KEXT zu Daemon zu kommunizieren und zu blockieren, bis das Ergebnis vom Daemon zurückgegeben wird
Hier ist, was ich sah und möchte mein Verständnis zusammenfassen:
- Mach Nachricht: Bietet sehr gute Möglichkeit der bidirektionalen Kommunikation Absender mit und antworten Ports mit Mechansim anstehen. Die Mach-Nachrichten-APIs (z. B.
mach_msg
,mach_port_allocate
,bootstrap_look_up
) scheinen jedoch keine KPIs zu sein. Die Mach APImach_msg_send_from_kernel
kann verwendet werden, aber das allein wird nicht in der bidirektionalen Kommunikation helfen. Ist mein Verständnis richtig? - IOUserClient: Dies scheint mehr mit der Kommunikation von Benutzerraum zu KEXT zu tun und dann einige Rückrufe von KEXT zu haben. Ich habe keine Möglichkeit gefunden, die Kommunikation von KEXT zum Daemon zu starten und dann auf das Ergebnis vom Daemon zu warten. Fehle ich etwas?
- Sockets: Dies könnte die letzte Option sein, da ich den gesamten bidirektionalen Kommunikationskanal von KEXT zu Daemon implementieren müsste.
ioct
l/sysctl
: Ich weiß nicht viel über sie. Von dem, was ich gelesen habe, ist es nicht die empfohlene Option vor allem für die bidirektionale Kommunikation- RPC-Mig: Wieder weiß ich nicht viel über sie. Sieht kompliziert aus, was ich gesehen habe. Nicht sicher, ob dies empfohlen wird.
- KÜNCUserNotification: Dies scheint nur eine Benachrichtigung an den Benutzer von KEXT bereitzustellen. Es erfüllt meine Anforderung nicht.
Unterstützte Plattform ist (ab 10.5). Wenn Sie sich die Anforderung ansehen, kann Ihnen jemand Hinweise zu diesem Thema geben?
Vielen Dank im Voraus.
Haben Sie ein Beispiel gefunden, wie Sie dies mit Sockeln implementieren können? – gbdavid