Flux standard

En informatique, les flux standard (standard stream en anglais) sont des canaux pour l'entrée et la sortie de données sur les systèmes d'exploitation UNIX et assimilés. L'accès à ces flux est habituellement fourni par la bibliothèque stdio.h du langage de programmation C. Ces flux sont au nombre de trois, au travers desquels les programmes peuvent faire entrer ou sortir des informations.

Application

[modifier | modifier le code]
Les flux standards : entrée, sortie, erreur.

Les utilisateurs connaissent généralement ces flux comme moyen par lequel un texte provenant d'un input device, et un texte s'affichant sur un afficheur sont transmis. Ils sont alors essentiellement vus comme un moyen de transmettre du texte utilisateur, une séquence de caractères dans un codage de caractères prédéterminés tel que CP850 sous DOS ou UTF-8 sous Unix.

Ces flux peuvent également servir à enchaîner des programmes ; la sortie de l'un servant alors d'entrée au suivant. Un exemple bien connu est l'utilisation d'un paginateur tel que more ou less, qui donne à l'utilisateur un moyen de contrôler quelle partie de la sortie est affichée.

Bien que le contenu usuel de ces flux soit du texte, il est techniquement possible de les utiliser pour transmettre une séquence d'octets arbitraire, associée à aucune représentation textuelle. Par exemple, le logiciel gzip peut recevoir un fichier non compressé sur son entrée et fournir un fichier compressé sur sa sortie.

Entrée standard

[modifier | modifier le code]

L'entrée standard est le flux d'entrée par lequel du texte ou toute autre donnée peut être entré dans un programme. Par défaut, certains programmes utilisent l'entrée standard comme source de données si aucun fichier d'entrée n'a été spécifié.

Le descripteur de fichier de l'entrée standard est 0.

Sortie standard

[modifier | modifier le code]

La sortie standard est le flux de sortie dans lequel les données sont écrites par le programme. Les données sont habituellement écrites à l'écran, à moins d'une redirection. Ce flux est prévu pour être le flux de sortie par défaut.

Le descripteur de fichier de la sortie standard est 1.

Une manière simple, bien que techniquement inexacte, de concevoir le principe de la sortie standard est de le considérer comme « le périphérique vers lequel le programme envoie les données ». Ainsi, si le périphérique en question est l'écran, « écrire dans la sortie standard » revient à « écrire sur l'écran » ou « afficher à l'écran ».

En réalité la sortie standard n'est qu'un « tuyau de données », que l'on branche sur un périphérique. Ce périphérique devient alors le périphérique de sortie standard.

Erreur standard

[modifier | modifier le code]

L'erreur standard est le flux de sortie permettant aux programmes d'émettre des messages d'erreurs et des diagnostics. Il s'agit d'un flux distinct de la sortie standard, qui peut être redirigé indépendamment.

Le descripteur de fichier de l'erreur standard est 2.

Lien avec les langages de programmation

[modifier | modifier le code]

Le langage C est l'un des premiers langages à avoir formalisé les flux de cette sorte. Sous son influence et celle d'Unix, d'autres langages reprennent ce découpage en flux, dont : C++, Python, Perl, Ksh, Bash, Java.

Lien avec le langage C

[modifier | modifier le code]

Le fichier d'en-tête <stdio.h> de la bibliothèque standard du C définit trois pointeurs qui représentent les flux standard :

  • stdin pour l'entrée standard ;
  • stdout pour la sortie standard ;
  • stderr pour l'erreur standard.

Ces pointeurs sont du type FILE* et peuvent être utilisés directement avec la majorité des opérations pour les fichiers.

Quand un programme fonctionne dans un terminal, l'entrée standard correspond au clavier, et la sortie standard ainsi que l'erreur standard sont affichées dans ce terminal.

Du fait de l'omniprésence du C, en particulier pour la programmation des logiciels accompagnant de nombreux systèmes d'exploitation, et en raison de l'élégance et de l'efficacité de ce concept, ces flux standards sont présents ou émulés sur de nombreux systèmes d'exploitation, qu'ils soient des UNIX ou non.