En Unix, ¿qué significa "Todo es un flujo de bytes"?

En Unix, ¿qué significa "Todo es un flujo de bytes"?

Soy un novato en Linux y, mientras exploro el sistema de archivos, a menudo me encuentro con la frase "todo es un archivo". Veo una respuesta a esta pregunta.aquípero todavía no entiendo el concepto. En la respuesta se menciona que precisamente "Todo es un flujo de bytes."

No entiendo lo que significa decir que monitor/teclado, etc. se representa como "flujo de bytes". ¿Alguien puede ayudarme a visualizar esto?

Respuesta1

"Todo es un archivo" es el eslogan, por así decirlo. Un meme, por así decirlo. No es exactamente cierto.

Obviamente, los dispositivos de hardware no son archivos reales de la misma manera que hello.txtlo serían los de un sistema de archivos ext4. Muchos de ellos ni siquiera tienen que ver con los dispositivos de almacenamiento.

Pero aunque no todo esarchivo, varias cosas pueden seraccedido como sieran archivos, al menos en cierta medida. Es decir, tienen un nombre en el árbol del sistema de archivos y se pueden utilizar las llamadas al sistema read()y para ellos. write()Esto último es especialmente importante si consideramos el sentido de que "todo es un flujo de bytes", ya que esas llamadas acceden a flujos de bytes.

Dado que las mismas llamadas al sistema funcionan para archivos normales, dispositivos de disco sin formato, terminales, tomas de red y tuberías, se puede utilizar el mismo conjunto de herramientas con cada uno. Por ejemplo, echo foofunciona igual independientemente de dónde esté conectada la salida. Esto puede simplificar las implementaciones de utilidades y facilita su aplicación para nuevos propósitos. Un shell u otra utilidad de línea de comandos no necesita hacer nada especial para conectarse a través de una tubería o un socket a un servidor SSH y acceder a él a través de la red. (Aunque para las sesiones interactivas, SSH crea un pseudoterminal, por lo que no es tan diferente de una sesión local).

Además, cuando varias cosas están presentes en el sistema de archivos, se pueden enumerar lsy acceder a catellas con redirecciones de shell ( echo foo > ...). Esto puede resultar útil para acceder a archivos especiales en /proco /sysdesde scripts, sin necesidad de un binario especial para realizar una llamada al sistema menos común.

Todavía notodoes un archivo o un flujo de bytes, y para las cosas que lo son, no todo se puede hacer con read()y write(). Los sockets UDP no son flujos de bytes, ya que transmiten datagramas de varios bytes con tamaños fijos. (Aunque read()todavía write()trabajo en ellos, solo que de manera un poco diferente). Algunas acciones aún deben realizarse con la ioctl()llamada al sistema, y ​​las operaciones ioctl son específicas del dispositivo. En Linux, los dispositivos de red no tienen nombres en el sistema de archivos.

Ver también, por ejemplo

Respuesta2

Todo en un sistema UNIX/Linux se puede visualizar como una especie de dispositivo de entrada o salida.

Un disco es ambas cosas: o le escribes un flujo de bytes o lees un flujo de bytes. Un teclado es un dispositivo de entrada: lees un flujo de bytes desde el teclado.

La interpretación de este flujo de bytes depende del programa que utiliza actualmente el teclado, ya sea un shell, un programa de usuario, un programa del sistema u otra cosa. El terminal es simplemente un flujo de bytes que se escriben: STDOUT o STDERR.

La analogía se rompe un poco cuando se habla de consolas gráficas, pero dentro de cada ventana de terminal se mantiene. Esa ventana de terminal es simplemente algo que espera a que el shell/programa le envíe bytes y muestra esos bytes en forma de texto u otros caracteres ASCII al usuario.

Como se señaló en los comentarios a esta respuesta, la analogía se desmorona aún más a medida que se profundiza en el sistema. La frase inicial "Todo es un archivo" y la frase relacionada "Todo es un flujo de bytes" parece haber sido acuñada para simplificar la visión del sistema para aquellos que son nuevos en él o que tienen experiencia limitada con él. A medida que adquiera experiencia y se involucre más con Linux, se dará cuenta de que esta simplificación a veces es incorrecta, pero aún tiene valor para quienes recién se familiarizan con el entorno.

información relacionada