stringtranslate.com

Tubería con nombre

En informática , una canalización con nombre (también conocida como FIFO por su comportamiento) es una extensión del concepto de canalización tradicional en Unix y sistemas 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 pipa tradicional " no tiene nombre " y dura sólo lo que dura el proceso. Sin embargo, una tubería con nombre puede durar mientras el sistema esté activo, más allá de la vida útil del proceso. Se puede eliminar si ya no se utiliza. Por lo general, una canalización con nombre aparece como un archivo y generalmente los procesos se adjuntan a ella para IPC.

En Unix

En lugar de una canalización de shell convencional y sin nombre, una canalización con nombre utiliza el sistema de archivos . Se crea explícitamente usando mkfifo()[1] o mknod(), [2] y dos procesos separados pueden acceder a la canalización por nombre: un proceso puede abrirlo como lector y el otro como escritor.

Por ejemplo, se puede crear una tubería y configurar gzip para comprimir los elementos conectados a ella:

mkfifo  mi_pipegzip  -9  -c  <  mi_tubería  >  out.gz & 

En un shell de proceso separado, de forma independiente, se podrían enviar los datos a comprimir:

archivo cat > my_pipe

La canalización con nombre se puede eliminar como cualquier archivo:

rm mi_pipe

Se puede utilizar una canalización con nombre para transferir información de una aplicación a otra sin el uso de un archivo temporal intermedio. Por ejemplo, puede canalizar la salida de gzip a una canalización con nombre de esta manera (aquí.gz es del ejemplo anterior, pero puede ser cualquier gz):

mkfifo  -m 0666 /tmp/namedPipe  gzip  -d  <  out.gz  >  /tmp/namedPipe

Luego cargue los datos sin comprimir en una tabla MySQL [3] así:

CARGAR ARCHIVO DE DATOS '/tmp/namedPipe' EN LA TABLA nombreTabla ;      

Sin esta canalización con nombre, sería necesario escribir la versión completa sin comprimir de file.gz antes de cargarlo 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 canalizaciones con nombre. [4]

En ventanas

Se puede acceder a una canalización con nombre de forma muy parecida a un archivo. Funciones del SDK de Win32CreateFile , ReadFiley abrir, leer, escribir y cerrar una tubería, respectivamente WriteFile. CloseHandleA 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 Unix. Además, a diferencia de sus homólogos de Unix, las canalizaciones con nombre son volátiles (se eliminan después de cerrar 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 en la ruta especial \\.\pipe\(es decir, una canalización llamada " foo " tendría un nombre de ruta completo de \\.\pipe\foo). Las canalizaciones anónimas utilizadas en la canalización en realidad se denominan canalizaciones con un nombre aleatorio.

Los usuarios rara vez los ven, pero hay excepciones notables. La herramienta de virtualización de hardware de PC VMware Workstation , por ejemplo, puede exponer puertos serie emulados al sistema host como canalizaciones con nombre, y el depurador en modo kernel WinDbg de Microsoft admite canalizaciones con nombre como transporte para sesiones de depuración (de hecho, VMware y WinDbg pueden ser acoplados entre sí, ya que WinDbg normalmente requiere una conexión en serie a la computadora de destino, lo que permite a los desarrolladores de controladores realizar su desarrollo y pruebas en una sola computadora). 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:

.NET Framework 3.5 ha agregado compatibilidad con canalizaciones con nombre. [5]

Las canalizaciones 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 en la suite Server Message Block (SMB), basado en el uso de un recurso compartido especial de comunicación entre procesos (IPC). El IPC de SMB puede pasar de forma transparente y fluida el contexto de autenticación del usuario a Named Pipes. Todo el conjunto de servicios del protocolo NT Domain de Windows NT se implementa como servicio DCE/RPC a través de Named Pipes, al igual que las aplicaciones administrativas de Exchange 5.5.

Ver también

Referencias

  1. ^ "mkfifo, mkfifoat: cree un archivo especial FIFO". Norma IEEE 1003.1-2017 . El grupo abierto .
  2. ^ "mknod, mknodat: crear directorio, archivo especial o archivo normal". Norma IEEE 1003.1-2017 . El grupo abierto.
  3. ^ "13.2.7 Declaración CARGAR DATOS". Manual de referencia de MySQL 8.0 . MySQL .
  4. ^ Aidan Van Dyk (27 de marzo de 2008). "Re: psql y canalizaciones con nombre". piratas informáticos pgsql . PostgreSQL .
  5. ^ "Espacio de nombres System.IO.Pipes". Red de desarrolladores de Microsoft .
  6. ^ "Cómo conectarse a SQL Server utilizando una versión anterior de SQL Server". Microsoft . 2019-11-19 . Consultado el 19 de mayo de 2020 .

enlaces externos