FILE. Ces fonctions
sont définies dans le fichier include <stdio.h>. Voici les
principales fonctions utilisées (cf le cours de C) :
#include <stdio.h> FILE *fopen( char *chemin, char *mode ); int fclose( FILE * ); int fprintf( FILE *, char *format, ... ); int fwrite( void *ptr, int size, int nbelem, FILE * ); int fread( void *ptr, int size, int nbelem, FILE * ); int fflush( FILE * ); int feof( FILE * );Notez que ces fonctions existent aussi bien en C sous DOS que sous Macintosh ou UNIX. Elles doivent être utilisées si l'on désire écrire un programme portable. Dans ce cas, il est évident que l'on s'interdit l'usage de toutes les fonctionnalités propres à chaque système d'exploitation.
Note : les opérations d'entrées/sorties effectuées par les
fonctions ci-dessus sont bufferisées; ainsi, l'appel à
fwrite() ou fprintf() copie simplement les données dans un
tampon (ou buffer), qui est vidé une fois plein vers le fichier
concerné. Ceci permet d'éviter de multiplier inutilement les opérations
d'entrées/sorties, souvent coûteuses. Une conséquence troublante pour
le débutant est que lors de l'envoi de caractères vers l'écran, ceux ci
n'apparaissent pas immédiatement, sauf si l'on force la vidange du tampon
avec un retour chariot ou l'appel explicite à fflush().
Le noyau UNIX maintient une table des fichiers ouverts par un processus. Le terme fichier désigne ici un flux de données unidirectionnel qui n'est pas nécessairement associé à un fichier disque.
Chaque processus dispose toujours à son lancement de trois flux de données :
Un programme accède aux flux de données ouverts en spécifiant des descripteurs, qui sont simplement des nombre entiers correspondant à l'indice du flux dans la table. La table est remplie dans l'ordre d'ouverture des fichiers, en commençant à 3 puisque les trois premiers descripteurs sont toujours occupés par les flux standards (voir figure 5.1).
| bp
[height=4cm]ps/tabdesc.ps
bp |
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open( char *chemin, int mode, ... ); int close( int desc ); int read( int desc, void *ptr, int nb_octets ); int write( int desc, void *ptr, int nb_octets );
La fonction open() ouvre un fichier en lecture ou en écriture,
crée un nouveau descripteur et le retourne.
close() ferme un descripteur.
read() et write() permettent de lire ou d'écrire une zone
mémoire sur un descripteur.