Os pipes são um canal de comunicação entre dois processos. Quando um processo escreve para o pipe, o outro processo pode ler a partir dele, descodificando a mensagem lá deixada. Normalmente, um pipe pode armazenar informação de forma a que o escritor possa lá deixar várias mensagens, sem que o leitor as tenha lido primeiro. Quando o pipe fica cheio, então sim, o processo escritor tem de suspender a sua actividade até que o leitor leia alguma das mensagens.
Na animação, pode experimentar o funcionamento dos pipes. Neste caso, existem
dois processos escritores a enviarem mensagens para um mesmo processo leitor. Para
ler as mensagens, basta que o leitor seleccione de que pipe as quer ler, e
elas surgem na ordem pela qual foram introduzidas -
FIFO.
Nota:
Nada impede um processo de ler no mesmo pipe que escreve. No entanto,
o processo "arrisca-se" a ler o que escreveu.
Para que no exemplo anterior o processo leitor possa seleccionar de que canal deseja
ler, é necessário que tenha consigo uma identificação do pipe.
No Unix, no entanto, tal identificação não é, por norma, precisa. Na realidade,
quando um processo cria um pipe e depois faz o
fork
,
dado que o contexto do processo pai é partilhado pelo filho, o canal fica de imediato
estabelecido e associado aos dois. Em oposição a estes un-named pipes,
estão, obviamente, os named pipes, que, servem para estabelecer comunicação
entre dois processos que não tenham sido criados a partir do mesmo. Servem-se, então,
do nome atribuído para acederem ao pipe e estabelecerem comunicação.