¿Existen flujos "no estándar" en Linux/Unix?

¿Existen flujos "no estándar" en Linux/Unix?

Los llamados "flujos estándar" en Linux son stdin, stdout y stderr. Hay que llamarlos "estándar" por una razón. ¿Existen transmisiones no estándar? ¿El kernel trata fundamentalmente de manera diferente esas transmisiones no estándar?

Respuesta1

En este contexto, una "secuencia" es un archivo abierto en un proceso. (La palabra "transmisión" puede tener otros significados que aquí están fuera de tema).

Las tres secuencias estándar son las que se supone que ya están abiertas cuando se inicia un programa. El descriptor de archivo 0 se llama entrada estándar porque ahí es donde se supone que un programa debe leer la entrada del usuario o su entrada de datos predeterminada. El descriptor de archivo 1 se llama salida estándar porque ahí es donde se supone que un programa debe escribir su salida de datos normal. El descriptor de archivo 2 se denomina error estándar porque es allí donde se supone que un programa debe escribir sus mensajes de error.

Otros números de descriptores de archivos no son nada estándar porque no tienen una función preasignada. Terminarán usándose para lo que quiera el programa. Entonces, cualquier archivo abierto por un programa podría llamarse "flujo no estándar", pero sería extraño y confuso: "abrir un archivo que no sea stdin, stdout o stderr" en realidad no necesita un nombre, y "flujo no estándar" suena como si lo fuera. algún tipo especial de archivo o un archivo abierto mediante un método no estándar, lo cual no es el caso.

La función convencional de los descriptores de archivos 0-2 la otorga la biblioteca estándar y ciertos programas. Por ejemplo, los programas de inicio de sesión de consola y los emuladores de terminal inician el shell (u otro programa) con el terminal abierto en estos descriptores de archivos. La biblioteca estándar de C crea FILE*objetos (lo que C llama flujos) para estos tres descriptores estándar. No hay ningún tratamiento especial en el núcleo.

Respuesta2

El kernel trata todos los descriptores de archivos de la misma manera. Es solo una convención tener procesos que usan el descriptor de archivo 0 como entrada (stdin), el descriptor de archivo 1 como salida (stdout) y errores de impresión en el descriptor de archivo 2 (stderr).

Cuando se inicia su terminal, crea un pseudo—tty y lanza un shell con entradas/salidas asignadas a los descriptores de archivos 0, 1 y 2. Luego, si su programa no usa esta convención, tendrá que redirigir adecuadamente las entradas y /o salidas.

información relacionada