En informática , una tubería con nombre (también conocida como FIFO por su comportamiento) es una extensión del concepto de tubería tradicional en sistemas Unix y similares a Unix , y es uno de los métodos de comunicación entre procesos (IPC). El 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 dura solo mientras el proceso esté en funcionamiento. Sin embargo, una tubería con nombre puede durar mientras el sistema esté en funcionamiento, más allá de la vida del proceso. Se puede eliminar si ya no se usa. Por lo general, una tubería con nombre aparece como un archivo y, generalmente, los procesos se adjuntan a ella para la IPC.
En lugar de una tubería de shell convencional sin nombre , una tubería con nombre utiliza el sistema de archivos . Se crea explícitamente utilizando mkfifo()
[1] o [2] y dos procesos separados pueden acceder a la tubería por nombre: un proceso puede abrirla como lector y el otro como escritor.mknod()
Por ejemplo, se puede crear una tubería y configurar gzip para comprimir los datos que se envían a ella:
mkfifo mi_tuberíagzip -9 -c < mi_tubería > salida.gz &
En un shell de proceso separado, de forma independiente, se podrían enviar los datos a comprimir:
archivo cat > my_pipe
La tubería con nombre se puede eliminar como cualquier archivo:
rm mi_tubería
Se puede utilizar una canalización con nombre para transferir información de una aplicación a otra sin utilizar un archivo temporal intermedio. Por ejemplo, se puede canalizar la salida de gzip a una canalización con nombre de la siguiente manera (aquí out.gz es del ejemplo anterior, pero puede ser cualquier gz):
mkfifo -m 0666 /tmp/tubería con nombre gzip -d < salida.gz > /tmp/namedPipe
Luego cargue los datos sin comprimir en una tabla MySQL [3] de la siguiente manera:
CARGAR DATOS INFILE '/tmp/namedPipe' EN LA TABLA tableName ;
Sin esta canalización con nombre, sería necesario escribir la versión completa sin comprimir de file.gz antes de cargarla en MySQL. Escribir el archivo temporal requiere mucho tiempo y genera más E/S y menos 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]
Se puede acceder a una canalización con nombre de forma muy similar a un archivo. Las funciones del SDK de Win32CreateFile
, ReadFile
, WriteFile
y CloseHandle
abren, leen desde, escriben en y cierran una canalización, respectivamente. A diferencia de Unix, no existe una interfaz de línea de comandos , excepto PowerShell .
Las canalizaciones con nombre no se pueden crear como archivos dentro de un sistema de archivos normal, a diferencia de lo que ocurre en Unix. Además, a diferencia de sus contrapartes de Unix, las canalizaciones con nombre son volátiles (se eliminan después de que se cierra la última referencia a ellas). Cada canalización se coloca en el directorio raíz del sistema de archivos de canalización con nombre (NPFS), montado bajo la ruta especial \\.\pipe\
(es decir, una canalización llamada " foo " tendría una ruta completa de nombre \\.\pipe\foo
). Las canalizaciones anónimas que se utilizan en la canalización son en realidad canalizaciones con nombre con un nombre aleatorio.
Los usuarios rara vez los ven, pero hay excepciones notables. La herramienta de virtualización de hardware VMware Workstation PC , por ejemplo, puede exponer puertos seriales emulados al sistema host como canales con nombre, y el depurador de modo kernel WinDbg de Microsoft admite canales con nombre como transporte para sesiones de depuración (de hecho, VMware y WinDbg se pueden acoplar entre sí, ya que WinDbg normalmente requiere una conexión serial al equipo de destino, lo que permite que los desarrolladores de controladores realicen su desarrollo y prueba en un solo equipo). Ambos programas requieren que el usuario ingrese nombres en el formulario. \\.\pipe\name
Las canalizaciones con nombre de Windows NT pueden heredar un contexto de seguridad.
Resumen de canalizaciones con nombre en Microsoft Windows:
ReadFile
, WriteFile
).NET Framework 3.5 ha añadido compatibilidad con canalizaciones con nombre. [5]
Las tuberías con nombre también se pueden utilizar como punto final en Microsoft SQL Server . [6]
Las canalizaciones con nombre también son un protocolo de red de la suite Server Message Block (SMB), basado en el uso de un recurso compartido especial de comunicación entre procesos (IPC). La IPC de SMB puede pasar de forma transparente y sin problemas el contexto de autenticación del usuario a través de canalizaciones con nombre. Todo el conjunto de servicios del protocolo de dominio NT de Windows NT se implementa como servicio DCE/RPC sobre canalizaciones con nombre, al igual que las aplicaciones administrativas de Exchange 5.5.