Quase tudo no Linux pode ser considerado um arquivo , mas a principal diferença entre um arquivo regular e um named pipe é que um arquivo nomeado pipe é uma instância especial de um arquivo que não possui conteúdo no sistema de arquivos.
Aqui está uma citação de man fifo
:
Um arquivo especial FIFO (um pipe nomeado) é semelhante a um pipe, exceto que é acessado como parte do sistema de arquivos. Pode ser aberto por múltiplos processos para leitura ou escrita. Quando os processos estão trocando dados através do FIFO, o kernel passa todos os dados internamente sem gravá-los no sistema de arquivos. Assim, o arquivo especial FIFO não tem conteúdo no sistema de arquivos; a entrada do sistema de arquivos serve apenas como um ponto de referência para que os processos possam acessar o pipe usando um nome no sistema de arquivos.
O kernel mantém exatamente um objeto pipe para cada arquivo especial FIFO que é aberto por pelo menos um processo. O FIFO deve ser aberto em ambas as extremidades (leitura e escrita) antes que os dados possam ser passados. Normalmente, abrir os blocos FIFO até que a outra extremidade seja aberta também.
Então, na verdade, um pipe nomeado não faz nada até que algum processo leia e grave nele. Ele não ocupa nenhum espaço no disco rígido (exceto um pouco de meta-informação), ele não usa a CPU.
Você pode verificar isso fazendo isso:
Crie um canal nomeado
$ mkfifo /tmp/testpipe
Vá para algum diretório, por exemplo /home/user/Documents
, e gzip tudo dentro dele, usando o pipe nomeado.
$ cd /home/user/Documents
$ tar cvf - . | gzip > /tmp/testpipe &
[1] 28584
Aqui você deve ver o PID do processo gzip. Em nosso exemplo, foi 28584.
Agora, verifique o que este PID está fazendo
$ ps u -P 28584
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
c0rp 28584 0.0 0.0 29276 7800 pts/8 S 00:08 0:00 bash
Você verá que está usando sem recursos . 0% de uso da CPU, 0% de uso de memória.
Verifique o palpite sobre o uso do espaço no arquivo
$ du -h /tmp/testpipe
0 testpipe
E novamente 0
, nada. O tubo de ensaio pode ser usado novamente, se necessário.
Não esqueça de matar o gzip, usando kill -15 28584
. E remova nosso pipe nomeado usando rm /tmp/testpipe
Exemplo de uso
Você pode redirecionar quase tudo usando o pipe nomeado. Como exemplo, você pode ver este um proxy de linha .
Também aqui está mais uma explicação legal sobre o uso do pipe nomeado. Você pode configurar dois processos em um servidor para se comunicar usando um canal nomeado em vez de pilha TCP / IP. É muito mais rápido e não carrega recursos de rede. Por exemplo, seu servidor da Web pode se comunicar com o banco de dados diretamente usando um canal nomeado, em vez de usar localhost
address ou escutar alguma porta.