“Conocimiento Sistemas>unix

¿Qué se llama tubería y sin nombre en UNIX?

2013/3/18
En los sistemas similares a UNIX, las tuberías son un mecanismo para la comunicación entre procesos (IPC). Permiten que un proceso envíe datos a otro proceso. Hay dos tipos principales:tuberías nombradas (también llamadas FIFO) y tuberías sin nombre (también llamadas tuberías anónimas).

tuberías sin nombre (tuberías anónimas):

* Creación: Creado usando la llamada de sistema `pipe ()`. Esta llamada crea una tubería unidireccional que consta de dos descriptores de archivos:uno para leer (`fd [0]`) y otro para escribir (`fd [1]`).

* Acceso: Solo el proceso que creó la tubería puede acceder a él. La existencia de la tubería no se conoce fuera del contexto del proceso de creación. Típicamente utilizado para la comunicación entre un proceso padre e hijos o entre dos procesos que están explícitamente conectados.

* Lifetime: La tubería existe solo para la vida útil de los procesos que lo usan. Cuando cualquier proceso cierra su final, la tubería se destruye automáticamente y cualquier intento adicional de leer o escribir fallará.

* Ejemplo (usando `fork ()` y `pipe ()`):

`` `C

#Include

#Include

#Include

#Include

int main () {

int fd [2]; // Descriptores de archivos para la tubería

pid_t pid;

if (pipe (fd) ==-1) {

Perror ("tubería fallida");

salida (1);

}

pid =horqu ();

if (pid <0) {

Perror ("Falló en la bifurcación");

salida (1);

} else if (pid ==0) {// Proceso infantil

cerrar (fd [1]); // Cerrar el final de escritura

buffer de char [100];

leer (fd [0], búfer, sizeof (buffer));

printf ("niño recibido:%s \ n", búfer);

cerrar (fd [0]);

} else {// Proceso principal

cerrar (fd [0]); // Cerrar el final de lectura

const char* Message ="¡Hola del padre!";

escribir (fd [1], mensaje, strlen (mensaje) + 1); // +1 para terminador nulo

cerrar (fd [1]);

esperar (nulo); // espera a que termine el niño

}

regresar 0;

}

`` `` ``

tuberías con nombre (FIFOS):

* Creación: Creado usando la llamada del sistema `mkfifo ()`. Esto crea un archivo en el sistema de archivos que representa la tubería. El nombre del archivo actúa como el identificador para la tubería.

* Acceso: Múltiples procesos pueden acceder a una tubería con nombre. Cualquier proceso que conozca la ruta de la tubería puede abrirla para leer o escribir (aunque solo un proceso puede escribir a la vez, a menos que use configuraciones especiales). Sobreviven más allá de la vida de los procesos que los usan.

* Lifetime: La tubería persiste en el sistema de archivos hasta que se elimine explícitamente usando `Unlink ()`.

* Ejemplo (usando dos programas separados que se comunican a través de una tubería con nombre):

Necesitaría dos programas:uno para escribir al FIFO y otro para leerlo. `mkfifo ()` se llama una vez (tal vez en un script de configuración) para crear el FIFO, luego los programas `abiertos ()` el FIFO para leer/escribir. Los procesos deben manejar errores, incluida la posibilidad de que el FIFO no esté existente y los errores en `Open ()`.

Diferencias clave resumidas:

| Característica | Tubería sin nombre | Pipe llamado (FIFO) |

| ----------------- | ---------------------------- | ----------------------------- |

| Creación | `pipa ()` | `mkfifo ()` |

| Acceso | Solo creación de proceso | Múltiples procesos |

| Persistencia | Existe solo durante la vida útil del proceso | Persiste en el sistema de archivos |

| Interproceso | Por lo general, los procesos padre-hijo o conectados explícitamente | Puede conectar procesos no relacionados |

| Entrada del sistema de archivos | No | SÍ |

Las tuberías con nombre son más flexibles para la comunicación entre procesos no relacionados, mientras que las tuberías no identificadas son más simples y más eficientes para la comunicación entre procesos estrechamente relacionados como un padre y su hijo. La elección depende de las necesidades de comunicación específicas de su aplicación.

unix
¿Qué es un byte?
¿Qué comando muestra el contenido actual de completa tabla de enrutamiento IP en una máquina UNIX o Mac OS X?
¿QUÉ significa dzdo en Linux?
¿Cuál es la diferencia entre execl y sistema en unix?
¿Cuál es el propósito del comando de exportación en Linux?
¿Qué significa el comando echo en Unix?
¿Qué hace el comando rd?
¿Número de caracteres en un nombre de archivo UNIX?
Conocimiento de la computadora © http://www.ordenador.online