Na ciência da computação, um pipe nomeado (também chamado de named pipe ou FIFO) é uma extensão do conceito de encadeamento do sistema Unix e dos seus métodos de comunicação entre processos. O mesmo conceito é encontrado no Microsoft Windows, apesar da sua semântica ser razoavelmente diferente. Uma canalização tradicional (anônima) dura somente o tempo de execução do processo e, por outro lado, o pipe nomeado persiste além da vida do processo e precisa ser "desligado" ou apagado quando não é mais usado. Os processos geralmente se conectam a um pipe nomeado (normalmente um arquivo) quando necessitam realizar alguma comunicação com outro processo (IPC).
Pipe nomeado no Unix
Ao contrário do pipe convencional, não nomeado e de console, um pipe nomeado é criado explicitamente utilizando-se os comandos mkfifo() ou mknod(). Dois processos podem utilizar este pipe através do seu nome.
Por exemplo, pode-se criar um pipe e instruir o programa gzip para comprimir aquilo que é enviado (canalizado - piped) para ele.
mkfifo meu_pipe
gzip -9 -c < meu_pipe > saida.gz &
Em um shell de processo separado, independentemente, poderiam ser enviados os dados a serem comprimidos:
cat arquivo > meu_pipe
O pipe nomeado pode ser deletado como qualquer arquivo:
rm meu_pipe
Um pipe nomeado pode ser usado para transferir informações de uma aplicação para outra sem o uso de um arquivo temporário intermediário. Por exemplo, você pode canalizar (pipe) a saída do gzip em um pipe nomeado desta forma:
mkfifo --mode=0666 /tmp/pipeNomeado
gzip --stdout -d arquivo.gz > /tmp/pipeNomeado
Então carregar os dados descomprimidos em uma tabela MySQL[1] desta forma:
LOAD DATA INFILE '/tmp/pipeNomeado' INTO TABLE nomeDaTabela;
Sem este pipe nomeado seria necessário escrever a versão descomprimida inteira do arquivo.gz antes de carregá-lo no MySQL. Escrever o arquivo temporário é demorado e resulta em mais E/S e menos espaço livre no disco rígido.
O terminal de linha de comando do PostgreSQL, o psql
, também suporta o carregamento de dados de pipes nomeados. [2]
Pipe nomeado no Windows
No Windows, o projeto do pipe nomeado foi influenciado pela comunicação cliente-servidor e, por isso, eles se parecem muito mais com sockets do que com operações convencionais de escrita e leitura. O Windows suporta um "modo passivo" para aplicações servidoras (comparável com os domain sockets do Unix). O Windows 95 suporta pipes nomeados em modo cliente que, no Windows NT, também podem atuar como servidores.
O pipe nomeado pode ser acessado como um arquivo. As funções CreateFile, ReadFile, WriteFile e CloseHandler, da SDK Win32, podem ser utilizadas para abrir, ler, escrever e fechar um pipe. As funções da biblioteca C, como fopen, também podem ser utilizadas para operações em pipes nomeados, ao contrário do caso dos Windows Sockets, onde a comunicação em rede não foi implementada como operações padrão de I/O em arquivos. Não existe interface de linha de comando como nos sistemas Unix.
O pipe nomeado não é permanente e não pode ser criado como um arquivo especial em sistemas de arquivo que permitam escrita, como no Unix. O pipe é volátil (é liberado após a última referência para ele ser fechada), é alocado na raiz do named pipe filesystem (NPFS) e é montado através do caminho especial \\. \pipe\ (isto é, um pipe nomeado como "foo" deve ter um nome de caminho de \\.\pipe\foo). O pipe anônimo dos comandos de encadeamento é na realidade um pipe nomeado com um nome aleatório.
Pipe nomeado numa rede Windows
O pipe nomeado também é utilizado como protocolo de rede da suíte Server Message Block (SMB). O IPC do SMB pode passar o contexto de autenticação do usuário de maneira transparente através de pipes nomeados. Toda a suíte de serviços de um domínio do Windows NT é implementada através de pipes nomeados.
Ver também
Referências
- «Cópia arquivada». Consultado em 16 de setembro de 2013. Arquivado do original em 14 de julho de 2011
Ligações externas
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.