Pipe nomeado
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
editarAo 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
editarNo 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
editarO 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
editarReferências
- ↑ MySQL 5.1 Reference Manual :: 12.2.6 LOAD DATA INFILE Syntax
- ↑ «Cópia arquivada». Consultado em 16 de setembro de 2013. Arquivado do original em 14 de julho de 2011
Ligações externas
editar- «The Linux Programmer's Guide: Named Pipes». , em inglês
- «Linux Journal: Introduction to Named Pipes». , em inglês
- «MSDN Library: Named Pipes». , em inglês
- «Better Pipes for Windows 95/NT (1986 Bill Heyman)». , em inglês