Programmer en langage C
190
© Éditions Eyrolles
Nous nous contenterons donc d’en fournir une brève liste :
fscanf ( fichier, format, liste_d’adresses )
fprintf ( fichier, format, liste_d’expressions )
fgetc ( fichier )
fputc ( entier, fichier )
fgets ( chaîne, lgmax, fichier )
fputs ( chaîne, fichier )
La signification de leurs arguments est la même que pour les fonctions conversationnelles
correspondantes. Seule fgets comporte un argument entier (lgmax) de contrôle de longueur. Il précise le nombre maximal de caractères (y compris le \0 de fin) qui seront placés
dans la chaîne.
Leur valeur de retour est la même que pour les fonctions conversationnelles. Cependant, il
nous faut apporter quelques indications supplémentaires qui ne se justifiaient pas pour des
entrées-sorties conversationnelles (mais qui auraient un intérêt en cas de simple « redirection » des entrées-sorties), à savoir que la valeur de retour fournie par fgetc est du type int
(et non, comme on pourrait le croire, de type char). Lorsque la fin de fichier est atteinte, cette
fonction fournit la valeur EOF (constante prédéfinie dans – en général -1). La fin
de fichier n’est détectée que lorsque l’on cherche à lire un caractère alors qu’il n’y en a plus de
disponible, et non pas, dès que l’on a lu le dernier caractère (ce qui, ici, serait assez mal approprié puisque alors on ne pourrait obtenir à la fois le code de ce caractère et une indication de
fin de fichier). D’autre part, notez bien que cette convention fait, en quelque sorte, double
emploi avec la fonction feof.
D’une manière générale, toutes les fonctions présentées ci-dessus fournissent une valeur de
retour bien définie en cas de fin de fichier ou d’erreur. Vous trouverez tous les détails utiles
dans l’annexe.
Important. A priori, on peut toujours dire que n’importe quel fichier, quelle que soit la manière
dont l’information y a été représentée, peut être considéré comme une suite de caractères. Bien
entendu, si l’on cherche à lister, par exemple, le contenu d’un fichier tel que celui créé dans la
section 2.1 (suite d’entiers), le résultat risque d’être sans signification (on obtiendra une suite de
caractères apparemment quelconques, sans rapport aucun avec les nombres enregistrés).
Mais, sans aller jusqu’à le lister, on peut se demander s’il ne serait pas possible de le recopier,
à l’aide d’une répétition de fgetc et de fputc. Or cela semble effectivement possible puisque
ces fonctions se contentent de prélever un caractère (donc un octet) et de le recopier tel quel.
Ainsi, quel que soit le contenu de l’octet lu, on le retrouvera dans le fichier de sortie.
En réalité, cela n’est que partiellement vrai car certains environnements distinguent les
fichiers de texte des autres (qu’ils appellent parfois « fichiers binaires », alors qu’au bout du
compte tout fichier est binaire !) ; plus précisément, lors de l’ouverture du fichier, on peut spécifier si l’on souhaite ou non considérer le contenu du fichier comme du texte. Cette distinction
est en fait motivée par le fait que le caractère de fin de ligne (\n) possède, dans ces environnements, une représentation particulière obtenue par la succession de deux caractères (retour
Delannoy Livre.book Page 190 Mercredi, 6. mai 2009 4:26 16
190
© Éditions Eyrolles
Nous nous contenterons donc d’en fournir une brève liste :
fscanf ( fichier, format, liste_d’adresses )
fprintf ( fichier, format, liste_d’expressions )
fgetc ( fichier )
fputc ( entier, fichier )
fgets ( chaîne, lgmax, fichier )
fputs ( chaîne, fichier )
La signification de leurs arguments est la même que pour les fonctions conversationnelles
correspondantes. Seule fgets comporte un argument entier (lgmax) de contrôle de longueur. Il précise le nombre maximal de caractères (y compris le \0 de fin) qui seront placés
dans la chaîne.
Leur valeur de retour est la même que pour les fonctions conversationnelles. Cependant, il
nous faut apporter quelques indications supplémentaires qui ne se justifiaient pas pour des
entrées-sorties conversationnelles (mais qui auraient un intérêt en cas de simple « redirection » des entrées-sorties), à savoir que la valeur de retour fournie par fgetc est du type int
(et non, comme on pourrait le croire, de type char). Lorsque la fin de fichier est atteinte, cette
fonction fournit la valeur EOF (constante prédéfinie dans
de fichier n’est détectée que lorsque l’on cherche à lire un caractère alors qu’il n’y en a plus de
disponible, et non pas, dès que l’on a lu le dernier caractère (ce qui, ici, serait assez mal approprié puisque alors on ne pourrait obtenir à la fois le code de ce caractère et une indication de
fin de fichier). D’autre part, notez bien que cette convention fait, en quelque sorte, double
emploi avec la fonction feof.
D’une manière générale, toutes les fonctions présentées ci-dessus fournissent une valeur de
retour bien définie en cas de fin de fichier ou d’erreur. Vous trouverez tous les détails utiles
dans l’annexe.
Important. A priori, on peut toujours dire que n’importe quel fichier, quelle que soit la manière
dont l’information y a été représentée, peut être considéré comme une suite de caractères. Bien
entendu, si l’on cherche à lister, par exemple, le contenu d’un fichier tel que celui créé dans la
section 2.1 (suite d’entiers), le résultat risque d’être sans signification (on obtiendra une suite de
caractères apparemment quelconques, sans rapport aucun avec les nombres enregistrés).
Mais, sans aller jusqu’à le lister, on peut se demander s’il ne serait pas possible de le recopier,
à l’aide d’une répétition de fgetc et de fputc. Or cela semble effectivement possible puisque
ces fonctions se contentent de prélever un caractère (donc un octet) et de le recopier tel quel.
Ainsi, quel que soit le contenu de l’octet lu, on le retrouvera dans le fichier de sortie.
En réalité, cela n’est que partiellement vrai car certains environnements distinguent les
fichiers de texte des autres (qu’ils appellent parfois « fichiers binaires », alors qu’au bout du
compte tout fichier est binaire !) ; plus précisément, lors de l’ouverture du fichier, on peut spécifier si l’on souhaite ou non considérer le contenu du fichier comme du texte. Cette distinction
est en fait motivée par le fait que le caractère de fin de ligne (\n) possède, dans ces environnements, une représentation particulière obtenue par la succession de deux caractères (retour
Delannoy Livre.book Page 190 Mercredi, 6. mai 2009 4:26 16
