Os canos não podem transbordar. Um pipe é apenas um buffer (uma certa quantidade de memória, provavelmente 64KB em um sistema atual) entre um produtor e um consumidor. Se o produtor produzir mais rápido do que o consumidor consome, o produtor é bloqueado (isso significa que o programa irá dormir) até que o consumidor deixe espaço no buffer novamente lendo-o.
Além disso, o caso que você descreve não é tecnicamente um pipe. Se estamos falando de POSIX sh
, o redirecionamento para um arquivo ( acommand > afile
) torna o ponto stdout do comando diretamente no arquivo. Um pipe envolve o caractere |
, por coincidência também chamado de "pipe", e é uma conexão entre dois programas em execução: acommand | anothercommand
.
(Mas, novamente, o que realmente acontece nos bastidores é outra história: por exemplo, há muitos arquivos de dispositivos pseudo sob / dev que realmente redirecionam para processos em execução. Por exemplo, echo Hello World > /dev/pts/1
pode estar gravando em seu xterm atual )