Estaba revisando un conjunto de preguntas de entrevista que se hacen desde un administrador de Unix; Encontré un tema llamado "tubería con nombre".
Busqué en Google el tema; hasta cierto punto he podido entenderlo: - tubos con nombre || FIFO
Pero aún siento que me falta el conocimiento de cuándo usar este tipo particular de tubería. ¿Hay situaciones especiales en las que las tuberías sin nombre no funcionarían?
Respuestas:
Las tuberías con nombre (fifo) tienen
cuatrotres ventajas que se me ocurren:son bidireccionales, las tuberías sin nombre pueden ser unidireccionales*(Actualizado, gracias a los comentarios de Stephane Chazelas )
Entonces, una tarea inmediatamente obvia que no puede lograr con una tubería sin nombre es una aplicación cliente / servidor convencional.
El último punto (marcado) sobre las tuberías unidireccionales es relevante en Linux, POSIX (ver
popen()
) dice que una tubería solo necesita ser legible o escribible , en Linux son unidireccionales . Consulte Comprender el kernel de Linux (3ª Ed. O'Reilly) para obtener detalles específicos de Linux (p787). Otros sistemas operativos ofrecen tuberías bidireccionales (sin nombre).Como ejemplo, Nagios usa un fifo para su archivo de comando . Varios procesos externos (scripts CGI, comprobaciones externas, NRPE, etc.) escriben comandos / actualizaciones en este Fifo y estos son procesados por el proceso persistente de Nagios.
Las canalizaciones con nombre tienen características similares a las conexiones TCP, pero existen diferencias importantes. Debido a que un Fifo tiene un nombre de sistema de archivos persistente, puede escribir en él incluso cuando no hay lector, es cierto que las escrituras se bloquearán (sin E / S asíncrona o sin bloqueo), aunque no perderá datos si el receptor no está iniciado (o se está reiniciando).
Como referencia, consulte también los sockets de dominio de Unix y la respuesta a esta pregunta de Stackoverflow que resume los principales métodos de IPC , y este que habla sobre
popen()
fuente
Las canalizaciones anónimas o sin nombre proporcionan un medio de comunicación interproceso unidireccional entre procesos diferentes que están relacionados por una relación padre-hijo o por ser hijos de un padre común que proporciona la canalización, como un shell proceso. Debido a que los procesos están relacionados, la asociación de descriptores de archivo a la tubería puede ser implícita y no requiere un objeto con un nombre que sea externo a los procesos. Una tubería sin nombre solo existe mientras los procesos que la usan mantengan descriptores de archivo abiertos en la tubería. Cuando los procesos salen y el sistema operativo cierra todos los descriptores de archivo asociados con los procesos, se cierra la tubería sin nombre.
Las tuberías con nombre son de hecho FIFO. Estos son objetos persistentes representados por nodos en el sistema de archivos. Una canalización con nombre proporciona una comunicación bidireccional de muchos a muchos entre uno o más procesos que no están necesariamente relacionados y no es necesario que existan al mismo tiempo. El nombre del archivo de la tubería sirve como una dirección o contrato entre los procesos de comunicación. Si solo un proceso escribe en una tubería con nombre y otro proceso lee de la tubería con nombre, entonces la tubería con nombre se comporta de la misma manera que una tubería sin nombre entre los dos procesos relacionados.
Entonces, la respuesta corta es que necesita una canalización con nombre para la comunicación entre procesos no relacionados que pueden no existir al mismo tiempo.
fuente
/run
un sistema de escritorio de Linux, probablemente encontrará algunos de los dos (denominados enchufes fifos y unix). Es una forma de IPC .Una ventaja que no se menciona en otra parte es que una tubería con nombre se puede usar en lugares donde solo funcionará un archivo.
Por ejemplo, algunos clientes de correo electrónico tienen la función de agregar el contenido de ~ / .signature a cada mensaje de correo. Si .signature fuera una opción de línea de comandos o si el cliente de correo pudiera notar que .signature es ejecutable y ejecutarlo, entonces no necesitaría una canalización con nombre. Pero si el cliente de correo no es tan sofisticado, puede crear una tubería con nombre llamada .signature y ejecutar una aplicación que genere una nueva firma cada vez que se lea el archivo.
fuente
Hay otra ventaja de las canalizaciones con nombre: puede usarlas en diferentes sistemas . Suponga que desea una comunicación en tiempo real de dos procesos que se ejecutan en máquinas diferentes. Luego comparta una carpeta entre los dos, coloque su FIFO en la carpeta y listo. Es considerablemente más fácil que transformar una aplicación diseñada para trabajar en archivos en un servicio que escucha en un puerto.
fuente