Standard streams

De la Viquipèdia, l'enciclopèdia lliure
Els fluxos estàndard d'entrada, sortida i error

En la programació d'ordinadors, els fluxos estàndard són canals de comunicació d'entrada i sortida interconnectats entre un programa informàtic i el seu entorn quan comença l'execució. Les tres connexions d'entrada/sortida (I/O) s'anomenen entrada estàndard (stdin), sortida estàndard (stdout) i error estàndard (stderr). Originalment, l'E/S passava a través d'una consola del sistema connectada físicament (entrada mitjançant teclat, sortida mitjançant monitor), però els fluxos estàndard ho abstrauen. Quan s'executa una ordre mitjançant un intèrpret d'ordres interactiu, els fluxos solen estar connectats al terminal de text on s'executa l'intèrpret d'ordres, però es poden canviar amb una redirecció o una canalització. De manera més general, un procés fill hereta els fluxos estàndard del seu procés pare.[1]

Aplicació[modifica]

Els usuaris generalment coneixen els fluxos estàndard com a canals d'entrada i sortida que gestionen dades procedents d'un dispositiu d'entrada o que escriuen dades des de l'aplicació. Les dades poden ser text amb qualsevol codificació o dades binàries. En molts sistemes moderns, el flux d'errors estàndard d'un programa es redirigeix a un fitxer de registre, normalment amb finalitats d'anàlisi d'errors.

Els fluxos es poden utilitzar per encadenar aplicacions, el que significa que el flux de sortida d'un programa es pot redirigir per ser el flux d'entrada a una altra aplicació. En molts sistemes operatius això s'expressa enumerant els noms de les aplicacions, separats pel caràcter de barra vertical (|), per aquest motiu sovint anomenat caràcter pipeline. Un exemple conegut és l'ús d'una aplicació de paginació, com ara more, que proporciona a l'usuari control sobre la visualització del flux de sortida a la pantalla.[2]

Rerefons[modifica]

A la majoria de sistemes operatius anteriors a Unix, els programes havien de connectar-se explícitament als dispositius d'entrada i sortida adequats. Les complexitats específiques del sistema operatiu van fer que aquesta fos una tasca de programació tediosa. En molts sistemes era necessari obtenir el control de la configuració de l'entorn, accedir a una taula de fitxers local, determinar el conjunt de dades previst i gestionar correctament el maquinari en el cas d'un lector de targetes perforades, unitat de cinta magnètica, unitat de disc, impressora de línia, perforació de targetes., o terminal interactiu.

Un dels diversos avenços innovadors d'Unix van ser els dispositius abstractes, que eliminaven la necessitat d'un programa per saber o tenir cura amb quin tipus de dispositius es comunicava. Els sistemes operatius més antics van obligar al programador a una estructura de registre i sovint una semàntica de dades no ortogonal i un control de dispositius. Unix va eliminar aquesta complexitat amb el concepte d'un flux de dades: una seqüència ordenada de bytes de dades que es poden llegir fins al final del fitxer. Un programa també pot escriure bytes com vulgui i no cal, i no pot declarar fàcilment el seu recompte o agrupació.

Entrada estàndard (stdin)[modifica]

L'entrada estàndard és un flux des del qual un programa llegeix les seves dades d'entrada. El programa sol·licita transferències de dades mitjançant l'ús de l'operació de lectura. No tots els programes requereixen entrada de flux. Per exemple, els programes dir i ls (que mostren els noms dels fitxers continguts en un directori) poden prendre arguments de línia d'ordres, però realitzar les seves operacions sense cap entrada de dades de flux.

Si no es redirigeix, l'entrada estàndard s'hereta del procés principal. En el cas d'un shell interactiu, normalment s'associa amb el teclat.[3]

Sortida estàndard (stdout)[modifica]

La sortida estàndard és un flux al qual un programa escriu les seves dades de sortida. El programa demana la transferència de dades amb l'operació d'escriptura. No tots els programes generen sortida. Per exemple, l'ordre de canvi de nom del fitxer (anomenada variadament mv, move, o ren) no té èxit.

A menys que es redirigeixi, la sortida estàndard s'hereta del procés principal. En el cas d'un shell interactiu, aquest sol ser el terminal de text que va iniciar el programa.

Error estàndard (stderr)[modifica]

L'error estàndard és un altre flux de sortida que solen utilitzar els programes per enviar missatges d'error o diagnòstics. És un flux independent de la sortida estàndard i es pot redirigir per separat.

Això resol el problema dels semipredicats, permetent distingir la sortida i els errors, i és anàleg a una funció que retorna un parell de valors; vegeu Problema de semipredicats: retorn de valors múltiples. La destinació habitual és el terminal de text que va iniciar el programa per oferir les millors possibilitats de ser vist fins i tot si es redirigeix la sortida estàndard (per tant, no s'observa fàcilment). Per exemple, la sortida d'un programa en un pipeline es redirigeix a l'entrada del següent programa o un fitxer de text, però els errors de cada programa encara van directament al terminal de text perquè l'usuari pugui revisar-los en temps real.[4]

Referències[modifica]

  1. «IO - Standard streams (stdin, stdout, stderr)» (en anglès), 05-09-2013. [Consulta: 10 desembre 2023].
  2. «Using C and C++ standard streams and redirection» (en anglès), 16-06-2017. [Consulta: 10 desembre 2023].
  3. «stdin(3)» (en anglès). Linux manual page. [Consulta: 10 desembre 2023].
  4. «What are stdin, stdout and stderr in Linux?» (en anglès). CodePre, 02-12-2021. [Consulta: 8 abril 2022].