Modo portatile per passare il descrittore di file tra diversi processi

Sulla maggior parte dei sistemi UNIX il passaggio di un file aperto tra processi può essere fatto facilmente per i processi figlio / genitore da fork (); comunque ho bisogno di condividere una fd “dopo” il bambino era già biforcuto.

Ho trovato alcune pagine web che mi dicono che sendmsg () può funzionare per i processi arbitary; ma questo sembra molto dipendente dal SO e complesso. Il portlisten sembra il miglior esempio che riesca a trovare, ma preferirei una buona libreria wrapper come libevent che nasconde tutta la magia di kqueue, pool, ….

Qualcuno sa se c’è qualche libreria (e modo portatile) per fare questo?

La soluzione migliore è provare a inviare il descrittore di file su un socket di dominio Unix. Questo è descritto in Stephens, e in alcuni punti del web, ma posso recuperare il codice per te se lo chiedi gentilmente.

Questo sarà abbastanza portatile in questi giorni; molte cose considerate come “non portatili” quando (come mmap !) sono estremamente comuni ora. Se hai bisogno di essere più portatile della “maggior parte dei sistemi al giorno d’oggi”, hai davanti a te un sacco di problemi interessanti, ma forse se ci dici di più su cosa stai facendo e su quali piattaforms stai lavorando ( forse piattaforms POSIX non Unix?) potremmo essere in grado di dare una mano.

Ho trovato (da un’altra domanda) una buona libreria: libancillaria . Questo è semplicemente ciò di cui ho bisogno!

Esiste un meccanismo basato su socket di dominio Unix per il trasferimento di descrittori di file (come i socket – che non possono essere mappati in memoria, ovviamente) tra processi – utilizzando la chiamata di sistema sendmsg() .

Potete trovare di più in Stevens (come citato da Curt Sampson), e anche su Wikipedia .

Puoi trovare una domanda molto più recente con codice funzionante su Invio del descrittore di file tramite socket Linux .