Eu estava revisando um conjunto de perguntas da entrevista feitas por um administrador unix; Encontrei um tópico chamado "pipe nomeado".
Eu pesquisei no tópico; até certo ponto, consegui entender: - pipes nomeados || FIFO
Mas ainda sinto que não tenho conhecimento de quando usar esse tipo específico de tubo. Existem situações especiais em que pipes não nomeados deixariam de funcionar?
Respostas:
Os pipes nomeados (fifo) têm
quatrotrês vantagens em que consigo pensar:eles são bidirecionais, tubos sem nome podem ser unidirecionais*(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 sobre
popen()
fonte
Os pipes anônimos ou anônimos fornecem um meio de comunicação interprocessual unidirecional entre processos diferentes relacionados por um relacionamento pai-filho ou por serem filhos de um pai comum que fornece o canal, como um shell processo. Como os processos estão relacionados, a associação dos descritores de arquivo ao canal pode estar implícita e não requer um objeto com um nome externo aos processos. Um canal sem nome existe apenas enquanto as processadas que o utilizam mantêm descritores de arquivo abertos no canal. Quando os processos saem e o sistema operacional fecha todos os descritores de arquivo associados aos processos, o canal sem nome é fechado.
Os pipes nomeados são de fato FIFO. Esses são objetos persistentes representados por nós no sistema de arquivos. Um canal nomeado fornece comunicação bidirecional de muitos para muitos entre um ou mais processos que não estão necessariamente relacionados e não precisam existir ao mesmo tempo. O nome do arquivo do canal serve como um endereço ou contrato entre os processos de comunicação. Se apenas um processo gravar em um pipe nomeado e outro processo ler no pipe nomeado, o pipe nomeado se comportará da mesma maneira que um pipe não nomeado entre os dois processos relacionados.
Portanto, a resposta curta é que você precisa de um canal nomeado para comunicação entre processos não relacionados que podem não existir ao mesmo tempo.
fonte
/run
um sistema desktop Linux, provavelmente encontrará alguns de ambos (chamados de soquetes fifos e unix). É uma forma de IPC .Uma vantagem não mencionada em outro lugar é que um pipe nomeado pode ser usado em locais onde apenas um arquivo funcionará.
Por exemplo, alguns clientes de email têm o recurso de anexar o conteúdo de ~ / .signature a cada mensagem de email. Se .signature fosse uma opção de linha de comando ou se o cliente de email pudesse perceber que .signature é executável e executá-lo, não seria necessário um pipe nomeado. Mas se o cliente de email não é tão sofisticado, você pode criar um pipe nomeado chamado .signature e executar um aplicativo que gere uma nova assinatura sempre que o arquivo for lido.
fonte
Há outra vantagem dos pipes nomeados: você pode usá-los em diferentes sistemas . Suponha que você queira a comunicação em tempo real de dois processos em execução em máquinas diferentes. Em seguida, compartilhe uma pasta entre os dois, coloque seu FIFO na pasta e pronto. É consideravelmente mais fácil do que transformar um aplicativo projetado para trabalhar em arquivos em um serviço escutando em uma porta.
fonte