FIFO(4)

NOME
fifo - pipe nomeado, primeiro a entrar último a sair

DESCRIÇÃO
Um arquivos especial FIFO (um pipe nomeado) é similar a um pipe, exceto que ele é acessado como para do sistema de arquivos. Ele pode ser aberto por muitos processor para leitura ou escrita. Quando os processos estão trocando dados via o FIFO, o kernel transmite todos os dados internamente sem escreve-los no sistema de arquivos. Dessa forma, o arquivo especial FIFO não possui conteúdos no sistema de arquivos, a entrada do sistema de arquivos meramente serve como um ponto de referência de forma que processos podem acessar o pipe usando um nome no sistema de arquivos.

O kernel mantem exatamente um objeto pipe para cada arquivo especial FIFO que é aberto por pelo menos um processo. O FIFO deve ser de ambos os lado (leitura and escrita) antes que dados possam ser passados. Normalmente, abrindo os blocos FIFO até que o outro termine é aberto também.

Um processo pode abrir um FIFO num modo que não o de bloco. Neste caso, abertura para somente leitura terá sucesso mesmo se nenhum tenha sido aberto no lado de escrita; abrindo para somente escrita falhará com ENXIO (sem aquele dispositivo ou endereço) a menos que outra extremidade tenha sido aberta.

No Linux, abrindo um FIFO para leitura e escrita terá sucesso em ambos modos bloco e o modo que não o de bloco. O POSIX deixa este comportamento indefinido. Ele pode ser usado para abrir um FIFO para exscrita enquanto ali não estão disponíveis leituras. Um processo que usa ambas as extremidades da conexão para comunicação com si mesmo deveria ser muito cautelosa para previnir congelamentos.

NOTAS
Quando um processo testa a escrita para um FIFO que não está aberto para leitura no outro lado, o processo é enviado um sinal SIGPIPE

Arquivos especiais FIFO podem ser criados por mkfifo(3), e são especialmente ressaltados com ls -l.

VEJA TAMBÉM
mkfifo(3), mkfifo(1), pipe(2), socketpair(2), open(2), signal(2), sigaction(2)

TRADUZIDO POR LDP-BR em 21/08/2000.
André L. Fassone Canova <lonelywolf@tblv.com.br> (tradução) Carlos Augusto Horylka <horyka@conectiva.com.br> (revisão)