varios todos subdirectorios renombrar que otro opción mover los listar imprime directorios directorio cuál crear copiar consola carpeta autor archivos archivo unix fork share file-descriptor

unix - todos - renombrar archivo linux



Forma portátil de pasar el descriptor de archivo entre diferentes procesos (3)

En la mayoría de los sistemas UNIX, pasar un archivo abierto entre procesos se puede hacer fácilmente para los procesos hijo / padre mediante fork (); sin embargo, necesito compartir un fd "después" de que el niño ya estaba bifurcado.

He encontrado algunas webpages que me dicen que sendmsg () puede funcionar para procesos arbitrarios; pero eso parece muy dependiente del sistema operativo y complejo. The portlisten parece ser el mejor ejemplo que puedo encontrar, pero preferiría una buena biblioteca de contenedor como libevent que esconde toda la magia de kqueue, pool, ...

¿Alguien sabe si hay alguna biblioteca (y una forma portátil) para hacer esto?


Hay un mecanismo basado en un socket de dominio Unix para transferir descriptores de archivos (como sockets, que no pueden mapearse en la memoria, por supuesto) entre procesos, usando la llamada al sistema sendmsg() .

Puede encontrar más en Stevens (como lo menciona Curt Sampson), y también en Wikipedia .

Puede encontrar una pregunta mucho más reciente con código de trabajo en el descriptor de archivo de envío por socket de Linux .


He encontrado (de otra pregunta) una buena biblioteca: libancillary . Esto es simplemente lo que necesito!


Su mejor opción es intentar enviar el descriptor de archivo sobre un socket de dominio Unix. Esto se describe en Stephens, y en algunos lugares en la web, pero puedo desenterrar el código para usted si lo solicita amablemente.

Esto será bastante portátil en estos días; muchas de las cosas consideradas "no portátiles" cuando (¡como mmap !) son extremadamente comunes ahora. Si necesita ser más portátil que "la mayoría de los sistemas en estos días", tiene muchos problemas interesantes por delante, pero posiblemente si nos dice más sobre lo que está haciendo y las plataformas en las que está trabajando ( quizás plataformas POSIX que no sean Unix?) podríamos ayudar.