Bibliothèque standard
Les flux de la bibliothèque standard
Le fichier d'inclusion <stdio.h> contient la définition du type FILE. Ce
type est une structure contenant les informations nécessaires à la bibliothèque
pour la manipulation d'un fichier ouvert (descripteur sous-jacent, tampon,
position, indicateurs d'erreur et de fin de fichier). Le contenu exact de cette
structure peut varier d'un système à l'autre. Les fonctions d'entrées-sorties de
la bibliothèque prennent en argument un pointeur sur une telle structure
(FILE *), qui indique le flux sur lequel on doit effectuer l'opération
d'écriture ou de lecture. Pour pouvoir utiliser une fonction d'entrée-sortie, il
faut donc avoir une valeur pour cet argument : c'est le rôle de la fonction
fopen de fournir ce pointeur en ouvrant le fichier. Les deux fonctions
printf et scanf sont équivalentes à fprintf(stdout, format, ...) et
fscanf(stdin, format, ...), où stdout et stdin sont des expressions de type
FILE *. Le standard C impose que stdin, stdout et stderr soient des
macros ; dans la glibc, elles désignent des variables globales du même nom.
Sur les systèmes de la famille UNIX, les fichiers ouverts par un processus le restent dans ses fils. Par exemple, le shell a en général trois flux standards, associés aux descripteurs 0, 1 et 2 :
- stdin : le terminal ouvert en lecture
- stdout : le terminal ouvert en écriture, mis en tampon par ligne lorsqu'il est associé à un terminal, et entièrement mis en tampon sinon (redirection vers un fichier ou un tube)
- stderr : le terminal ouvert en écriture, non mis en tampon
Ainsi, si l'exécution d'un programme C est réalisée à partir du shell, le
programme C dispose déjà de ces trois flux. Les données écrites dans un flux
mis en tampon ne sont transmises au noyau (appel système write) qu'au
remplissage du tampon, à la fin d'une ligne pour un flux mis en tampon par ligne,
lors d'un appel explicite à fflush ou à la fermeture du flux (fclose, exit).
Le mode de mise en tampon d'un flux peut être modifié avec setvbuf.