FILE *(un pointeur vers
FILE
).
FILE *fopen(const char *chemin, const char *mode)La fonction retourne le flot en cas de succès et
NULL
en cas d'échec.
chemin
donne le chemin vers le fichier.
mode
donne le mode d'ouverture et peut prendre une de 6 valeurs:
mode | accès | comportement | |
---|---|---|---|
si le fichier existe | si le fichier n'existe pas | ||
r | lecture | erreur | |
w | écriture | troncature | création |
a | écriture | création | |
r+ | lecture et écriture | erreur | |
w+ | troncature | création | |
a+ | création |
r,w,a
est évidente :
r
-- read
w
-- write
a
-- append
a
et a+
les écritures sont effectuées à la fin du flot.
fopen
retourne NULL
en cas d'échec,
l'ouverture correcte d'un fichier aura la forme
FILE *flot; if( ( flot = fopen(nom_fichier,mode) ) == NULL ){ /* on traite ici l'échec de l'ouverture * par exemple comme ci-dessous */ fprintf(stderr, "ouverture du fichier %s impossible", nom_fichier); return EXIT_FAILURE; }
int fclose(FILE *flot)
stdin
flot d'entrée standard,
stdout
flot de sortie standard,
stderr
flot d'erreur standard.
int fprintf(FILE *flot, const char *format, ...) int printf(const char *format, ...) int fscanf(FILE *flot, onst char *format,...) int scanf(const char *format,...)Quelques formats:
%s | char * |
%c | char |
%d et %i | int |
%hd et %hi | short |
%ld et %li | long |
%e et %f | double |
%u | unsigned int |
char *fgets(char *tampon, int taille, FILE *flot)lit une ligne (jusqu'à le caractère de la nouvelle ligne
'\n'
inclus) dans un tampon.
fgets
lit au plus taille-1
caractères et place à la fin de la chaîne lue le
caractère '\0'
.
int fputs(const chat *chaine, FILE *flot) int puts(const char* chaine)La fonction
fputs
écrit une ligne (c'est-à-dire
tous les caractères jusqu'à le caractère de la nouvelle ligne '\n'
)
dans un flot. puts
effectue la même opération sur le flot stdout
.
int fgets(FILE *flot) int getc(FILE *flot) int getchar(void)
getc
c'est la même chose que fgets
mais implémenté avec une macro-fonction.
getchar
lit sur le flot stdin
.
EOF
en cas d'échec.
int fputc(int caractere, FILE *flot) int putc(int caractere, FILE *flot) int putchar(int caractere)Ces fonctions retournent le caractère écrit en cas de succès et
EOF
en cas d'erreur.
int ungetc(int caractere, FILE *flot)remet un caractère dans un flot.
size_t fread(void *tampon, size_t taille, size_t nombre, FILE *flot) size_t fwrite(void *tampon, size_t taille, size_t nombre, FILE *flot)
tampon
donne l'adresse du début d'un tampon utilisé pour la lecture/écriture,
nombre
donne le nombre d'éléments à lire/écrire et taille
la taille d'un élément.
struct donnee{ int coeff; double val: }; typedef struct donnee donnee; donnee tab[100]; /*tableau de structures*/ FILE *flot; int i;alors
fwrite(tab, sizeof( donnee ), 50, flot);permettra d'écrire 50 premiers éléments du tableau
tab
dans le flot.
On pourra lire ces éléments avec
fread(tab, sizeof( donnee ), 50, flot);Les fonctions
fread
et fwrite
le nombre d'éléments lus/écrits.
Les fonctions suivantes permettent de gérer la position courante dans un flot:
int fseek(FILE *flot, long decalage, int origine) long ftell(FILE *flot) int rewind(FILE *flot)
La fonction ftell
donne la position courante exprimée en nombre d'octets depuis le
début du flot. En cas d'erreur elle retourne -1
.
La fonction rewind
met la position courante au début du flot.
La fonction fseek
permet de modifier la position courante.
Le paramètre origine
peut prendre une de trois valeurs
dont la signification est suivante:
SEEK_SET
: à partir du début du fichier,
SEEK_CUR
: à partir de la position courante,
SEEK_END
: à partir de la fin du flot.
Exemple:
fseek(flot, -10L, SEEK_CUR)
déplace la position courante de 10 octets vers le début du flot,
fseek(flot, -10L, SEEK_END)
met la position courante à 10 octets avant la fin du flot.
En particulier rewind(flot)
est équivalent à fseek(flot, 0L, SEEK_SET)
.