Sto facendo un confronto tra diversi meccanismi IPC disponibili su Mac OS X (pipe, socket, IPv System V, ecc.) E vorrei vedere come confrontare le porte Mach con quelle superiori alternative di livello. Tuttavia, ho riscontrato un problema di base: ottenere i diritti di invio alle porte attraverso i processi (in particolare, attraverso un processo principale e un processo figlio).Condivisione di porte Mach con processi figlio
A differenza dei descrittori di file, ports are generally not carried over to forked processes. Ciò significa che deve essere stabilito un altro modo per trasferirli. Quasi l'unica pagina pertinente che ho trovato su questo era this one, e in un aggiornamento affermano che il loro metodo non funziona più e non è mai stato garantito, anche se quel metodo era suggested by an Apple engineer in 2009. (Implica la sostituzione della porta di bootstrap, e ora la interruzione di XPC.) La sostituzione che suggeriscono utilizza funzioni deprecate, quindi non è una soluzione molto interessante.
Inoltre, una cosa che mi è piaciuta della vecchia soluzione è che le porte sono rimaste praticamente private tra i processi che l'hanno utilizzata. Non è stato necessario trasmettere l'esistenza della porta, proprio come le pipe (dalla chiamata pipe
) una volta biforcute. (Probabilmente vivrò con esso se c'è un'altra soluzione, ma è un po 'fastidioso.)
Quindi, come si passa un diritto di invio a una porta Mach da un processo padre a un processo figlio?
Sì, quello era un attacco "decente" con la porta di bootstrap, ma preferirei non farlo con nessun'altra porta speciale. – zneak