Aula 17: Pipes e FIFO — IPC entre Processos
Um pipe é um mecanismo de comunicação unidirecional entre processos — o que um escreve, o outro lê. Todo pipeline de shell (cmd1 | cmd2 | cmd3) é construído a partir de pipes anônimos. Um FIFO (named pipe) estende essa ideia para processos que não têm relação de fork. Na NVIDIA, pipelines de inferên
Um pipe é como um cano de água: um processo despeja água (escreve), outro processo puxa (lê). A água flui só em um sentido e você só consegue puxar o que já foi despejado.
- pipe
- Um mecanismo de IPC unidirecional mantido pelo kernel — um buffer pequeno onde um processo escreve e outro lê. Criado com pipe(fds), que retorna um par de FDs: fds[0]=leitura, fds[1]=escrita.
- FIFO (named pipe)
- Um pipe com um nome no sistema de arquivos. Criado com mkfifo(path, mode). Permite que processos sem relação de fork se comuniquem através de uma entrada no sistema de arquivos.
- pipe anônimo
- Um pipe sem nome no sistema de arquivos — só pode ser usado entre um processo-pai e seus descendentes de fork (que herdaram os FDs pelo fork). É o pipe que move os pipelines de shell.
- pipe com nome
- Outro nome para FIFO — um pipe que pode ser aberto pelo nome como um arquivo comum. Os dados passam pelo kernel e não ficam salvos em disco, mesmo havendo uma entrada no diretório.
- half-close
- Fechar apenas um dos FDs de um par de pipe. Quando todas as extremidades de escrita estão fechadas, uma leitura na extremidade de leitura retorna 0 (EOF). Essencial para uma comunicação correta com fork+pipe.