GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué denota el símbolo @ al comienzo de una ruta de socket de dominio unix en Linux?

El @ probablemente indica un socket sostenido en un abstract namespace que no pertenece a un archivo en el sistema de archivos.

Citando de La interfaz de programación de Linux por Michael Kerrisk:

57.6 El espacio de nombres de socket abstracto de Linux

El llamado espacio de nombres abstracto es una función específica de Linux que nos permite vincular un socket de dominio UNIX a un nombre sin que ese nombre se cree en el sistema de archivos. Esto proporciona algunas ventajas potenciales:

  • No necesitamos preocuparnos por posibles colisiones con nombres existentes en el sistema de archivos.
  • No es necesario desvincular la ruta del socket cuando hayamos terminado de usar el socket. El nombre abstracto se elimina automáticamente cuando se cierra el socket.
  • No necesitamos crear un nombre de ruta del sistema de archivos para el socket. Esto puede ser útil en un entorno chroot, o si no tenemos acceso de escritura a un sistema de archivos.

Para crear un enlace abstracto, especificamos el primer byte de sun_path campo como un byte nulo (\0).[...]

Mostrando un null byte inicial denotar ese tipo de socket puede ser difícil, por lo que tal vez esa sea la razón del @ inicial señal.


Según man 7 unix

  • resumen:una dirección de socket abstracta se distingue por el hecho de que sun_path[0] es un byte nulo (\0 ). Todos los bytes restantes en sun_path definen el "nombre" del socket. (Los bytes nulos en el nombre no tienen un significado especial). El nombre no tiene conexión con las rutas del sistema de archivos. La dirección del socket en este espacio de nombres está dada por el resto de los bytes en sun_path. Cuando getsockname(2), getpeername(2) y accept(2) devuelven la dirección de un socket abstracto, su longitud es sizeof(struct sockaddr_un) y sun_path contiene el nombre abstracto. El espacio de nombres de socket abstracto es una extensión de Linux no portátil.

Parece que estos son 'abstractos', por lo que no hay una ruta real presente en el sistema de archivos


Linux
  1. ¿Qué significa __init en el código del kernel de Linux?

  2. ¿Qué significa &al final de un comando de Linux?

  3. ¿Cuál es el equivalente Unix/Linux de E/S registrada?

  4. ¿Cuál es la ubicación correcta del archivo mysql.sock en Linux?

  5. ¿Qué significa el promedio de carga en Unix/Linux?

¿Cuál es la diferencia entre Linux y Unix?

Ruta absoluta vs relativa en Linux:¿Cuál es la diferencia?

¿Qué es la tabla de procesos de Linux? ¿En qué consiste?

¿Cuál es el efecto de configurar un socket de Linux:alta prioridad?

¿Qué significa el símbolo de la tubería de Linux? ¿hacer?

¿Qué significa el sufijo .d en Linux?