stringtranslate.com

Tubería con nombre

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 Unix

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]

En Windows

Se puede acceder a una canalización con nombre de forma muy similar a un archivo. Las funciones del SDK de Win32CreateFile , ReadFile, WriteFiley CloseHandleabren, 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:

.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.

Véase también

Referencias

  1. ^ "mkfifo, mkfifoat - crea un archivo especial FIFO". IEEE Std 1003.1-2017 . The Open Group .
  2. ^ "mknod, mknodat - crear directorio, archivo especial o archivo regular". IEEE Std 1003.1-2017 . The Open Group.
  3. ^ "13.2.7 Sentencia LOAD DATA". Manual de referencia de MySQL 8.0 . MySQL . Archivado desde el original el 2020-06-14 . Consultado el 2020-05-19 .
  4. ^ Aidan Van Dyk (27 de marzo de 2008). "Re: psql y canalizaciones con nombre". pgsql-hackers . PostgreSQL . Archivado desde el original el 20 de mayo de 2022 . Consultado el 19 de mayo de 2020 .
  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 . 19 de noviembre de 2019. Archivado desde el original el 20 de julio de 2020. Consultado el 19 de mayo de 2020 .

Enlaces externos