En informática , una tubería con nombre (también conocida como FIFO por su comportamiento) es una extensión del concepto tradicional de tubería en sistemas Unix y similares , y constituye uno de los métodos de comunicación entre procesos (IPC). Este concepto también se encuentra en OS/2 y Microsoft Windows , aunque la semántica difiere sustancialmente. Una tubería tradicional no tiene nombre y solo dura mientras el proceso esté activo. Sin embargo, una tubería con nombre puede durar mientras el sistema esté en funcionamiento, incluso después de que finalice el proceso. Se puede eliminar si ya no se utiliza. Generalmente, una tubería con nombre aparece como un archivo, y los procesos suelen conectarse a ella para la comunicación entre procesos.
En Unix
En lugar de una tubería convencional sin nombre, una tubería con nombre utiliza el sistema de archivos . Se crea explícitamente usando mkfifo()[ 1 ] o mknod(), [ 2 ] y cualquier número de procesos puede acceder a la tubería por nombre : un proceso puede abrirla como lector y otro como escritor, momento en el que la tubería se instancia y los datos pueden transmitirse a través de ella como en una tubería normal.
Por ejemplo, se puede crear una tubería y configurar gzip para comprimir los datos que se le envíen:
mkfifo mi_tubo gzip -9 -c <mi_pipe> out.gz &En un proceso separado, de forma independiente, se podrían enviar los datos que se van a comprimir:
archivo cat > mi_pipe
En el momento en que se abre el segundo shell my_pipepara escritura en el proceso que se ejecutará cat, la apertura de solo lectura del primer shell se desbloquea y ambos gzipse catejecutan simultáneamente, uno alimentando datos al otro a través de la tubería.
La tubería con nombre se puede eliminar como cualquier archivo:
rm mi_pipe
Se puede usar una tubería con nombre para transferir información de una aplicación a otra sin necesidad de un archivo temporal intermedio. Por ejemplo, se puede redirigir la salida de gzip a una tubería con nombre de la siguiente manera (aquí out.gz es del ejemplo anterior, pero puede ser cualquier archivo gz):
mkfifo -m 0666 /tmp/namedPipe gzip -d < out.gz > /tmp/namedPipe Luego, cargue los datos que se están descomprimiendo sobre la marcha en una tabla MySQL [ 3 ] de la siguiente manera:
CARGAR DATOS DEL ARCHIVO '/tmp/namedPipe' EN LA TABLA tableName ;Sin esta tubería con nombre, sería necesario escribir la versión completa sin comprimir del archivo file.gz antes de cargarlo en MySQL. Escribir el archivo temporal consume mucho tiempo y genera más operaciones de entrada/salida , además de reducir el espacio libre en el disco duro.
La utilidad de línea de comandos de PostgreSQLpsql , , también admite la carga de datos desde tuberías con nombre. [ 4 ]
En Windows
Se puede acceder a una tubería con nombre de forma muy similar a un archivo. Las funciones del SDK de Win32 abren CreateFile, ReadFileleen , escriben y cierran una tubería, respectivamente. A diferencia de Unix, no hay una interfaz de línea de comandos , excepto PowerShell .WriteFileCloseHandle
Las tuberías con nombre no se pueden crear como archivos dentro de un sistema de archivos normal, a diferencia de Unix. Además, a diferencia de sus contrapartes en Unix, las tuberías con nombre son volátiles (se eliminan después de que se cierra la última referencia a ellas). Cada tubería se coloca en el directorio raíz del sistema de archivos de tuberías con nombre (NPFS), montada bajo la ruta especial \\.\pipe\(es decir, una tubería llamada " foo " tendría una ruta completa de \\.\pipe\foo). Las tuberías anónimas utilizadas en la canalización son en realidad tuberías con nombre con un nombre aleatorio.
Son muy poco frecuentes para los usuarios, pero existen excepciones notables. La herramienta de virtualización de hardware VMware Workstation PC , por ejemplo, puede exponer puertos serie emulados al sistema host como tuberías con nombre, y el depurador en modo kernel WinDbg de Microsoft admite tuberías con nombre como transporte para sesiones de depuración (de hecho, VMware y WinDbg se pueden acoplar, ya que WinDbg normalmente requiere una conexión serie al equipo de destino, lo que permite a los desarrolladores de controladores realizar su desarrollo y pruebas en un solo equipo). Ambos programas requieren que el usuario ingrese nombres en el formulario.\\.\pipe\name
Las tuberías con nombre de Windows NT pueden heredar un contexto de seguridad.
Resumen de las tuberías con nombre en Microsoft Windows:
- Comunicación entre máquinas e intramáquinas
- Semidúplex o dúplex completo
- Orientado a bytes o orientado a paquetes
- Confiable
- Comunicación orientada a la conexión
- Lectura y escritura bloqueante o no bloqueante (seleccionable)
- Identificadores de E/S de dispositivos estándar (
ReadFile,WriteFile) - Espacio de nombres utilizado para crear identificadores
- Tráfico WAN ineficiente (solicitud explícita de transferencia de datos, a diferencia de, por ejemplo, la ventana deslizante TCP/IP, etc.)
- Lecturas con posibilidad de previsualización (lectura sin eliminar del búfer de entrada de la tubería)
El .NET Framework 3.5 ha añadido soporte para tuberías con nombre. [ 5 ]
Las tuberías con nombre también se pueden usar como un punto final en Microsoft SQL Server . [ 6 ]
Las tuberías con nombre también son un protocolo de red del conjunto Server Message Block (SMB), basado en el uso de un recurso compartido especial de comunicación entre procesos (IPC). La comunicación IPC de SMB puede transferir de forma transparente y sin interrupciones el contexto de autenticación del usuario a las tuberías con nombre. El conjunto completo de servicios del protocolo NT Domain de Windows NT se implementa como un servicio DCE/RPC sobre tuberías con nombre, al igual que las aplicaciones administrativas de Exchange 5.5.
Véase también
Referencias
- ↑ "mkfifo, mkfifoat - crea un archivo especial FIFO" . IEEE Std 1003.1-2017 . The Open Group .
- ↑ "mknod, mknodat - crea un directorio, un archivo especial o un archivo regular" . IEEE Std 1003.1-2017 . The Open Group.
- ↑ "13.2.7 LOAD DATA Statement" . Manual de referencia de MySQL 8.0 . MySQL . Archivado del original el 14 de junio de 2020. Consultado el 19 de mayo de 2020 .
- ↑ Aidan Van Dyk (27-03-2008). "Re: psql y tuberías con nombre" . pgsql-hackers . PostgreSQL . Archivado del original el 20-05-2022 . Recuperado el 19-05-2020 .
- ↑ "Espacio de nombres System.IO.Pipes" . Red de desarrolladores de Microsoft .
- ↑ "Cómo conectarse a SQL Server usando una versión anterior de SQL Server" . Microsoft . 19 de noviembre de 2019. Archivado del original el 20 de julio de 2020. Consultado el 19 de mayo de 2020 .
Enlaces externos
- Comunicaciones entre procesos en Linux: Tuberías con nombre ( Proyecto de Documentación de Linux , 1996)
- Introducción a las tuberías con nombre ( Linux Journal , 1997)
- Comunicación entre procesos