Lección 17: pipes y FIFO — IPC entre procesos
Un pipe es un mecanismo de comunicación unidireccional entre procesos — lo que uno escribe, el otro lo lee. Todo pipeline de shell (cmd1 | cmd2 | cmd3) se construye con pipes anónimos. Un FIFO (named pipe) extiende la idea a procesos no relacionados por fork. En NVIDIA, los pipelines de inferencia d
Un pipe es como una tubería de agua: un proceso vierte agua (escribe), otro la extrae (lee). El agua fluye solo en una dirección y solo puedes sacar lo que ya se vertió.
- pipe
- Un mecanismo de IPC unidireccional mantenido por el kernel — un buffer pequeño al que un proceso escribe y otro lee. Se crea con pipe(fds), que devuelve un par de FDs: fds[0]=lectura, fds[1]=escritura.
- FIFO (named pipe)
- Un pipe con un nombre en el sistema de archivos. Se crea con mkfifo(path, mode). Permite que procesos no relacionados por fork se comuniquen mediante una entrada del sistema de archivos.
- pipe anónimo
- Un pipe sin nombre en el sistema de archivos — solo se puede usar entre un proceso padre y sus descendientes de fork (que heredaron los FDs mediante fork). Este es el pipe que impulsa los pipelines de shell.
- pipe con nombre
- Otro nombre para el FIFO — un pipe que se puede abrir por nombre como un archivo normal. Los datos pasan por el kernel y no se almacenan en disco, aunque exista una entrada en el directorio.
- half-close
- Cerrar solo uno de los FDs de un par de pipe. Cuando todos los extremos de escritura están cerrados, leer del extremo de lectura devuelve 0 (EOF). Esencial para una comunicación correcta con fork+pipe.