você está aqui: Home  → Arquivo de Mensagens

Named pipe

Colaboração: Júlio Neves

Data de Publicação: 10 de outubro de 2017

Um outro tipo de pipe é o named pipe, que também é chamado de FIFO. FIFO é um acrônimo para "First In First Out" que se refere à propriedade em que a ordem dos bytes entrando no pipe é a mesma que a da saída. O name em named pipe é, na verdade, o nome de um arquivo. Os arquivos tipo named pipes são exibidos pelo comando ls como qualquer outro, com poucas diferenças:

$ ls -l fifo1
prw-r-r--   1   julio   dipao   0 Jan 22 23:11 fifo1|

o p na coluna mais à esquerda indica que fifo1 é um named pipe. O resto dos bits de controle de permissões, quem pode ler ou gravar o pipe, funcionam como um arquivo normal. Nos sistemas mais modernos uma barra vertical (|) colocada ao fim do nome do arquivo, é outra dica, e nos sistemas LINUX, onde a opção de cor está habilitada, o nome do arquivo é escrito em vermelho por default.

Nos sistemas mais antigos, os named pipes são criados pelo programa mknod, normalmente situado no diretório /etc. Nos sistemas mais modernos, a mesma tarefa é feita pelo mkfifo. O programa mkfifo recebe um ou mais nomes como argumento e cria pipes com estes nomes. Por exemplo, para criar um named pipe com o nome pipe1, faça:

 $ mkfifo pipe1 

Exemplo:

Como sempre, a melhor forma de mostrar como algo funciona é dando exemplos. Suponha que nós tenhamos criado o named pipe mostrado anteriormente. Em outra sessão ou uma console virtual, faça:

 $ ls -l > pipe1 

e em outra, faça:

 $ cat < pipe1

Voilá! A saída do comando executado na primeira console foi exibida na segunda. Note que a ordem em que os comandos ocorreram não importa.

Se você prestou atenção, reparou que o primeiro comando executado, parecia ter "pendurado". Isto acontece porque a outra ponta do pipe ainda não estava conectada, e então o kernel suspendeu o primeiro processo até que o segundo "abrisse" o pipe. Para que um processo que usa pipe não fique em modo de wait, é necessário que em uma ponta do pipe tenha um processo "tagarela" e na outra um "ouvinte".

Uma aplicação muito útil dos named pipes é permitir que programas sem nenhuma relação possam se comunicar entre si. Os named pipes também são usados para sincronizar processos, já que em um determinado ponto você pode colocar um processo para "ouvir" ou para "falar" em um determinado named pipe e ele daí só sairá, se outro processo "falar" ou "ouvir" aquele pipe.

Sobre o autor

Júlio Cézar Neves

O 4º UNIX do mundo nasceu na Cidade Maravilhosa, mais precisamente na Cobra Computadores, onde à época trabalhava o Julio. Foi paixão à 1ª vista! Desde então, (1980) atua nessa área como especialista em Sistemas Operacionais e linguagens de programação. E foi por essa afinidade que quando surgiu o Linux foi um dos primeiros a estudá-lo com profundidade e adotá-lo como Sistema Operacional e filosofia de vida. É autor dos livros Programação Shell Linux, 11ª edição e Bombando o Shell.


Veja a relação completa dos artigos de Júlio Neves

 

 

Opinião dos Leitores

Julio Neves
07 Dez 2017, 13:04
Que bom que vc gostou Célio! Não existe nenhuma padronização para criação e para dar nome a esses caras (pelo menos que eu saiba), mas como são temporários e 90% das vezes de vida muito curta, costumo criá-los no /tmp.
Qdo os crio em Scripts, removo-os no próprio script.
Celio
07 Dez 2017, 10:42
Olá Julio, bacana essa dica, me tira uma dúvida, existe algum diretório indicado para criação de named pipes? tem alguma convenção(ou padronização) pra isso?
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script