Qual é exatamente a diferença entre pipes e streams?

6

Eu li sobre pipes e transmissões e ainda estou confuso sobre como isso foi implementado.

Um programa é iniciado e lê os dados do fluxo de “entrada padrão” (stdin), para onde o teclado envia os dados.

Minha pergunta é: como isso é diferente de um pipe? Piping me permite ter um processo que envia dados para um pipe, e outro processo está lendo dados dele.

Quando o teclado é pressionado, os dados são enviados para stdin e um programa está lendo dados desse mesmo fluxo.

Uma operação de "leitura" é executada assim que os dados são enviados para esse fluxo, exatamente como um canal.

Esses fluxos são canalizados?

    
por user1091856 06.01.2015 / 15:11

2 respostas

7

O terminal i / o do Unix é tradicionalmente implementado como um tipo de fila . Os kernels mais antigos usavam clists. O V8 Unix usou fluxos . Na maioria dos casos, clists e streams são usados para implementar uma parte do link entre um processo do usuário (especificamente, um descritor de arquivo) e um driver de dispositivo de caractere (por exemplo, uma porta serial ou um pty).

Os pipes também são uma fila, mas eles vinculam processos do usuário (especificamente, um par de descritores de arquivos). Há uma variedade de implementações de tubos, incluindo soquetes; um tipo especial de arquivo; e até STREAMS (STREAMS é um derivado de fluxos V8.)

Assim, fluxos e pipes são implementações de uma fila, mas são usados em situações diferentes.

    
por 06.01.2015 / 20:24
4

Isso pode não ser totalmente preciso do ponto de vista técnico, mas pode ajudar sua confusão. Eu costumo pensar em um fluxo como algo intrínseco ao programa, como STDIN, STDOUT e STDERR, enquanto um pipe é externo ao programa. Por exemplo, no comando cat foo.txt | grep bar , o comando cat envia para seu STDOUT intrínseco, o canal externo conecta-o ao STDIN intrínseco de grep .

    
por 06.01.2015 / 15:36

Tags