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.