Después de mirar un socket con nombre de Unix y pensé que se llamaban tuberías. Miré las tuberías de nombre y no vi mucha diferencia. Vi que se inicializaron de manera diferente, pero eso es lo único que noto. Ambos usan la función de escritura/lectura de C y funcionan igual AFAIK.
¿Cuál es la diferencia entre los sockets de dominio de Unix y las canalizaciones con nombre? ¿Cuándo elegiría uno sobre el otro? ¿Cuál debo usar de forma predeterminada (por ejemplo, cómo uso vector de forma predeterminada en C ++ que usar deque, list o cualquier otra cosa si tengo necesidades)?
Los sockets de dominio UNIX son generalmente más flexibles que las canalizaciones con nombre. Algunas de sus ventajas son:
- Puede usarlos para más de dos procesos que se comunican (por ejemplo, un proceso de servidor con potencialmente múltiples procesos de cliente que se conectan);
- Son bidireccionales;
- Admiten el paso de credenciales UID/GID verificadas por kernel entre procesos;
- Admiten pasar descriptores de archivos entre procesos;
- Admiten modos de paquetes y paquetes secuenciados.
Para usar muchas de estas características, necesita usar el send()
/ recv()
familia de llamadas al sistema en lugar de write()
/ read()
.
Una diferencia es que las canalizaciones con nombre son unidireccionales, por lo que deberá usar dos de ellas para establecer una comunicación bidireccional. Los enchufes, por supuesto, son de dos vías. Parece un poco más complicado usar dos variables en lugar de una (es decir, dos tuberías en lugar de una toma).
Además, el artículo de wikipedia es bastante claro en el siguiente punto: “Los sockets de dominio Unix se pueden crear como flujos de bytes o como secuencias de datagramas, mientras que las canalizaciones son solo flujos de bytes”.
Las tuberías con nombre son, de hecho, bidireccionales pero medio duplex. Esto significa que la comunicación puede ir del extremo A al extremo B, o del B al A, pero nunca ambos al mismo tiempo.
@GregHewgill: desafortunadamente, esa pregunta es más sobre “qué es IPC” que sobre la diferencia que estoy preguntando:/. Lo vi antes de publicar, ¿debería haber vinculado y dicho que está relacionado? (no me sirvió)
– usuario34537
28 de febrero de 2012 a las 2:28
@acid: Sí, siempre es una buena idea vincular preguntas relacionadas y explicar qué pregunta aún tienes.
– Ben Voigt
28 de febrero de 2012 a las 4:12
Este artículo lo resumió bastante bien. Desmitificando los sockets de dominio Unix: thomasstover.com/uds.html
– Cong Ma
3 de marzo de 2013 a las 3:59
Enlace roto: techdeviancy.com/uds.html
– mcdado
26 de diciembre de 2019 a las 17:09