Qual é exatamente a diferença entre tubos e fluxos?

Qual é exatamente a diferença entre tubos e fluxos?

Eu li sobre pipes e streams e ainda estou confuso sobre como isso é 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 cachimbo? A tubulação me permite ter um processo que envia dados para um canal e outro processo lê dados dele.

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

Uma operação de “leitura” é executada assim que os dados são enviados para este fluxo, assim como um pipe.

Esses fluxos são canalizados?

Responder1

A E/S do terminal Unix tem sido tradicionalmente implementada como uma espécie defila. Kernels mais antigos usavam clists. V8 Unix usadofluxos. Na maioria dos casos, clists e streams são usados ​​para implementar uma parte do link entre um processo de usuário (especificamente, um descritor de arquivo) e um driver de dispositivo de caractere (por exemplo, uma porta serial ou um pty).

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

Portanto, streams e pipes são implementações de uma fila, mas são usados ​​em situações diferentes.

Responder2

Isso pode não ser totalmente preciso do ponto de vista técnico, mas pode ajudar na sua confusão. Costumo pensar em um stream 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 catcomando envia para seu STDOUT intrínseco, o canal externo o conecta ao grepSTDIN intrínseco de.

informação relacionada