Pode-se redirecionar muitos dados?

0

Estou trabalhando em um sistema Linux que roda no Kernel 3.2.0. Neste sistema eu escrevi um programa que no final gerará aproximadamente 50GB de dados que ele enviaria para o stdout. Esta saída eu quero redirecionar para um arquivo.

Algum tipo de estouro de tubo pode acontecer? Ou os pipes funcionam de maneira confiável, independentemente da quantidade de dados?

    
por Gregor 09.01.2014 / 20:28

1 resposta

3

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 )

    
por 09.01.2014 / 23:31

Tags