Inicio > Gestión de archivos y directorios > mkfifo

mkfifo: Crear una tubería con nombre

`mkfifo` es un comando que crea una tubería con nombre (FIFO, First-In, First-Out). Una tubería con nombre es un archivo especial que existe en el sistema de archivos y actúa como un canal de comunicación utilizado para intercambiar datos entre procesos diferentes. A diferencia de las tuberías anónimas, se puede acceder a ellas a través de una ruta de archivo, lo que facilita la comunicación entre procesos independientes.

Descripción general

`mkfifo` crea una tubería con nombre, un archivo especial, en el sistema de archivos. Esta tubería actúa como un canal de comunicación que permite que dos o más procesos independientes envíen y reciban datos. Cuando un proceso escribe datos en la tubería, otro proceso puede leerlos, y los datos se procesan en un orden de primero en entrar, primero en salir (FIFO).

Características principales

  • Existe en el sistema de archivos y se puede acceder a él mediante una ruta
  • Proporciona un canal de comunicación entre procesos independientes
  • Los datos se procesan en orden de primero en entrar, primero en salir (FIFO)
  • Útil para construir canalizaciones complejas en scripts de shell

Opciones principales

El comando `mkfifo` se utiliza principalmente con rutas de archivo como argumentos y admite algunas opciones básicas.

Opciones de creación

Comando generado:

Combina los comandos.

Descripción:

`mkfifo` Ejecutando el comando.

Combina las opciones anteriores para ejecutar virtualmente los comandos junto con la IA.

Ejemplos de uso

Se muestra cómo crear una tubería con nombre usando `mkfifo` y cómo se utiliza para la comunicación entre procesos.

Crear una tubería con nombre básica

mkfifo my_pipe

Crea una tubería llamada `my_pipe` en el directorio actual.

Crear una tubería con permisos específicos

mkfifo -m 600 my_private_pipe

Crea `my_private_pipe` donde solo el propietario puede leer y escribir.

Transferencia de datos usando una tubería con nombre

mkfifo data_channel
echo "Hello from Terminal 1!" > data_channel &
cat < data_channel

Ejemplo de escritura de datos en una terminal y lectura en otra. **Terminal 1:** `mkfifo data_channel` `echo "Hello from Terminal 1!" > data_channel` **Terminal 2:** `cat < data_channel`

Uso de tuberías con procesos en segundo plano

mkfifo background_output
(ls -l; sleep 2; echo "Done listing") > background_output &
cat < background_output

Transfiere la salida de un proceso que se ejecuta en segundo plano a otro comando a través de una tubería.

Consejos y precauciones

Puntos a tener en cuenta y consejos para usar tuberías con nombre.

Eliminación de tuberías

Las tuberías con nombre se pueden eliminar con el comando `rm`, al igual que los archivos normales. Es recomendable limpiar las tuberías innecesarias después de su uso.

  • `rm my_pipe`

Comportamiento de bloqueo (Blocking)

Las tuberías con nombre se comportan de forma bloqueante por defecto. Esto significa que si un lado intenta escribir (o leer), esperará hasta que el otro lado comience a leer (o escribir). Para evitar este comportamiento, ejecútelo en segundo plano con `cat < my_pipe &` o ábralo en modo no bloqueante usando la bandera `O_NONBLOCK`.

Uso de sistemas de archivos temporales

Para tuberías de uso temporal, se recomienda utilizar el directorio `/tmp` o el comando `mktemp` para crear tuberías con nombres únicos. Esto evita conflictos de nombres y garantiza que se limpien automáticamente tras el reinicio del sistema.


Comandos de la misma categoría