¿Alguien sabe cómo gestiona bash el envío de datos a través de las tuberías?Bash Pipe Handling
cat file.txt | tail -20
hace esto de impresión de comandos todos los contenidos de archivo.txt en un buffer, el cual es leído por la cola? ¿O este comando, digamos, imprime el contenido de file.txt línea por línea, y luego hace una pausa en cada línea para que la cola lo procese, y luego solicita más información?
La razón por la que pregunto es que estoy escribiendo un programa en un dispositivo incrustado que básicamente realiza una secuencia de operaciones en algún fragmento de datos, donde la salida de una operación se envía como entrada de la siguiente operación. Me gustaría saber cómo maneja esto linux (bash) así que por favor dame una respuesta general, no específicamente qué sucede cuando ejecuto "cat file.txt | tail -20".
¡Gracias de antemano por sus respuestas!
EDITAR: Shog9 señaló un artículo relevante de Wikipedia, esto no me llevó directamente al artículo, pero me ayudó a encontrar esto: http://en.wikipedia.org/wiki/Pipeline_%28Unix%29#Implementation que sí tenía la información que estaba buscando.
Disculpe por no aclararme. Por supuesto, estás usando un tubo y, por supuesto, estás usando stdin y stdout de las partes respectivas del comando. Había supuesto que era demasiado obvio para decirlo.
Lo que estoy preguntando es cómo se maneja/implementa esto. Dado que ambos programas no se pueden ejecutar a la vez, ¿cómo se envían los datos de stdin a stdout? ¿Qué sucede si el primer programa genera datos significativamente más rápido que el segundo programa? ¿El sistema acaba de ejecutar el primer comando hasta que finaliza o su búfer estándar está lleno y luego pasa al siguiente programa, y así sucesivamente en un bucle hasta que no quedan más datos para procesar o hay un mecanismo más complicado? ?