Quase tudo no Linux pode ser considerado um arquivo , mas a principal diferença entre um arquivo comum e um pipe nomeado é que um pipe nomeado é 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 pelo fato de ser acessado como parte do sistema de arquivos. Pode ser aberto por vários processos de leitura ou escrita. Quando os processos estão trocando dados via FIFO, o kernel passa todos os dados internamente sem gravá-los no sistema de arquivos. Portanto, o arquivo especial FIFO não possui 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 canal usando um nome no sistema de arquivos.
O kernel mantém exatamente um objeto de pipe para cada arquivo especial FIFO que é aberto por pelo menos um processo. O FIFO deve ser aberto nas duas extremidades (leitura e gravação) antes que os dados possam ser transmitidos. Normalmente, abrir os blocos FIFO até que a outra extremidade também seja aberta.
Então, na verdade, um pipe nomeado não faz nada até que algum processo o leia e grave. Não ocupa espaço no disco rígido (exceto um pouco de meta informações), não usa a CPU.
Você pode verificá-lo fazendo o seguinte:
Crie um canal nomeado
$ mkfifo /tmp/testpipe
Vá para algum diretório, por exemplo /home/user/Documents
, e gzip tudo dentro dele, usando pipe nomeado.
$ cd /home/user/Documents
$ tar cvf - . | gzip > /tmp/testpipe &
[1] 28584
Aqui você deve ver o PID do processo gzip. No nosso exemplo, era 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 ele não está usando 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 teste pode ser usado novamente, se necessário.
Não esqueça de matar o gzip, usando kill -15 28584
. E remova nosso pipe nomeado usandorm /tmp/testpipe
Exemplos de usos
Você pode redirecionar quase tudo usando o pipe nomeado. Como exemplo, você pode ver esse proxy de uma linha .
Também aqui está mais uma boa explicação do uso de pipes nomeados. Você pode configurar dois processos em um servidor para se comunicar usando um pipe nomeado em vez da pilha TCP / IP. É muito mais rápido e não carrega recursos de rede. Por exemplo, seu servidor Web pode se comunicar diretamente com o banco de dados usando um pipe nomeado, em vez de usar o localhost
endereço ou escutar alguma porta.