
Leí sobre tuberías y transmisiones y todavía estoy confundido sobre cómo se implementa.
Se inicia un programa y lee datos del flujo de "entrada estándar" (stdin), que es a donde el teclado envía datos.
Mi pregunta es, ¿en qué se diferencia eso de una pipa? La tubería me permite tener un proceso que envía datos a una tubería y otro proceso lee datos de ella.
Cuando se presiona el teclado, los datos se envían a la entrada estándar y un programa lee datos de esta misma secuencia.
Una operación de "lectura" se ejecuta tan pronto como se envían datos a esta secuencia, como si fuera una tubería.
¿Estos arroyos están canalizados?
Respuesta1
La E/S de terminal Unix se ha implementado tradicionalmente como una especie decola. Los núcleos más antiguos usaban clistas. V8 Unix usadocorrientes. En la mayoría de los casos, las clists y streams se utilizan para implementar una parte del vínculo entre un proceso de usuario (específicamente, un descriptor de archivo) y un controlador de dispositivo de caracteres (por ejemplo, un puerto serie o un pty).
Las canalizaciones también son una cola, pero vinculan procesos de usuario (específicamente, un par de descriptores de archivos). Existe una variedad de implementaciones de tuberías, incluidos enchufes; un tipo especial de archivo; e incluso STREAMS (STREAMS es un derivado de los flujos V8).
Por lo tanto, tanto los flujos como las canalizaciones son implementaciones de una cola, pero se utilizan en situaciones diferentes.
Respuesta2
Es posible que esto no sea completamente exacto desde una perspectiva técnica, pero puede ayudar a su confusión. Tiendo a pensar en una secuencia como algo intrínseco al programa, como STDIN, STDOUT y STDERR, mientras que una tubería es externa al programa. Por ejemplo, en el comando cat foo.txt | grep bar
, el cat
comando envía a su STDOUT intrínseco, la tubería externa luego lo conecta a grep
su STDIN intrínseco.