Os pipes nomeados (fifo) têm quatro três vantagens em que consigo pensar:
(Atualizado, graças aos comentários de Stephane Chazelas )
Portanto, uma tarefa imediatamente óbvia que você não pode realizar com um canal sem nome é um aplicativo cliente / servidor convencional.
O último ponto (afetado) acima sobre os tubos unidirecionais é relevante no Linux, o POSIX (consulte popen()
) diz que um tubo só precisa ser legível ou gravável , no Linux eles são unidirecionais . Consulte Noções básicas sobre o kernel do Linux (3ª Ed. O'Reilly) para obter detalhes específicos do Linux (p787). Outros sistemas operacionais oferecem tubos bidirecionais (sem nome).
Como exemplo, o Nagios usa um fifo para seu arquivo de comando . Vários processos externos (scripts CGI, verificações externas, NRPE etc.) escrevem comandos / atualizações para este artigo e são processados pelo processo persistente do Nagios.
Os pipes nomeados possuem recursos não muito diferentes das conexões TCP, mas existem diferenças importantes. Como um fifo tem um nome de sistema de arquivos persistente, você pode gravá-lo mesmo quando não há leitor, é certo que as gravações serão bloqueadas (sem E / S assíncrona ou sem bloqueio), embora você não perca dados se o receptor não estiver iniciado (ou está sendo reiniciado).
Para referência, ver também tomadas Unix domínio , e a resposta a esta questão Stackoverflow que resume as principais IPC métodos, e esta uma que fala sobrepopen()