Pipes



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.



Comunicação entre Processos Enviar mail aos autores Memória Partilhada


HomePage Menu Mecanismos de Sincronização Signals Semáforos Comunicação entre Processos Pipes Memória Partilhada Problemas de Programação Concorrente Glossário Links