Next: Ouverture d'un fichier Up: La bibliothèque standard Previous: La bibliothèque standard

Les descripteurs de fichiers.

Le fichier d'inclusion <stdio.h> contient la définition du type FILE. Ce type est une structure contenant les informations nécessaires au système pour la manipulation d'un fichier ouvert. Le contenu exact de cette structure peut varier d'un système à l'autre (UNIX, VMS, autre) , pour assurer la portabilité il est conseillé de ne pas chercher a connaitre le contenu exact.

Toutes les fonctions d'E/S utilisent en premier argument un pointeur sur une telle structure: FILE *. Le rôle de cet argument est d'indiquer le fichier 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 ce premier argument, c'est le rôle de la fonction fopen de nous fournir ce pointeur en "ouvrant" le fichier.

Les deux fonctions printf et scanf sont des synonymes de
     fprintf(stdout,...)
et
     fscanf(stdin,...)

stdout et stdin sont des expressions de type FILE * définies sous forme de macro-définitions dans le fichier <stdio.h>

 Avec POSIX ce sont effectivement des fonctions.



Sous UNIX les fichiers ouverts par un processus le restent dans ses fils. Par exemple le shell a en général trois fichiers ouverts:
stdin
le terminal ouvert en lecture.
stdout
le terminal ouvert en écriture.
stderr
le terminal ouvert en écriture, et en mode non bufferisé.
ainsi si l'exécution d'un programme C est réalisée à partir du shell le programme C a déjà ces trois descripteurs de fichiers utilisables.

C'est pourquoi il est en général possible d'utiliser printf et scanf sans ouvrir préalablement de fichiers. Mais si l'entrée standard n'est pas ouverte, scanf échoue:

Compilé, (a.out), cela donne les deux sorties suivantes:
$ a.out 
l'entree standard est ouverte
$ a.out <&- # fermeture de l'entree standard en ksh
l'entree standard est fermee
De même printf échoue si la sortie standard est fermée.

Dominique REVUZ

Mon Feb 2 12:10:31 MET 1998 Une Bug Un mail Merci