C - Fichier E/S
Le dernier chapitre a expliqué les périphériques d'entrée et de sortie standard gérés par le langage de programmation C. Ce chapitre explique comment les programmeurs C peuvent créer, ouvrir, fermer des fichiers texte ou binaires pour leur stockage de données.
Un fichier représente une séquence d'octets, qu'il s'agisse d'un fichier texte ou d'un fichier binaire. Le langage de programmation C permet d'accéder aux fonctions de haut niveau ainsi qu'aux appels de bas niveau (niveau du système d'exploitation) pour gérer les fichiers sur vos périphériques de stockage. Ce chapitre vous guidera à travers les appels importants pour la gestion des fichiers.
Ouvrir des fichiers
Vous pouvez utiliser le fopen() fonction pour créer un nouveau fichier ou pour ouvrir un fichier existant. Cet appel initialisera un objet de type FILE , qui contient toutes les informations nécessaires pour contrôler le flux. Le prototype de cet appel de fonction est le suivant −
FILE *fopen( const char * filename, const char * mode );
Ici, nom du fichier est une chaîne littérale, que vous utiliserez pour nommer votre fichier et accéder au mode peut avoir l'une des valeurs suivantes −
Sr.No. | Mode et description |
---|---|
1 | |
2 | |
3 | |
4 | |
5 | |
6 |
Si vous allez gérer des fichiers binaires, vous utiliserez les modes d'accès suivants au lieu de ceux mentionnés ci-dessus −
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
Fermer un fichier
Pour fermer un fichier, utilisez la fonction fclose( ). Le prototype de cette fonction est −
int fclose( FILE *fp );
Le fclose(-) la fonction renvoie zéro en cas de succès, ou EOF s'il y a une erreur dans la fermeture du fichier. Cette fonction vide en fait toutes les données encore en attente dans le tampon vers le fichier, ferme le fichier et libère toute mémoire utilisée pour le fichier. L'EOF est une constante définie dans le fichier d'en-tête stdio.h .
Il existe diverses fonctions fournies par la bibliothèque standard C pour lire et écrire un fichier, caractère par caractère, ou sous la forme d'une chaîne de longueur fixe.
Écrire un fichier
Voici la fonction la plus simple pour écrire des caractères individuels dans un flux −
int fputc( int c, FILE *fp );
La fonction fputc() écrit la valeur de caractère de l'argument c dans le flux de sortie référencé par fp. Il renvoie le caractère écrit écrit en cas de succès sinon EOF s'il y a une erreur. Vous pouvez utiliser les fonctions suivantes pour écrire une chaîne terminée par null dans un flux −
int fputs( const char *s, FILE *fp );
La fonction fputs() écrit la chaîne s au flux de sortie référencé par fp. Il renvoie une valeur non négative en cas de succès, sinon EOF est retourné en cas d'erreur. Vous pouvez utiliser int fprintf(FILE *fp,const char *format, ...) fonction également pour écrire une chaîne dans un fichier. Essayez l'exemple suivant.
Assurez-vous d'avoir /tmp répertoire disponible. Si ce n'est pas le cas, avant de continuer, vous devez créer ce répertoire sur votre machine.
#include <stdio.h> main() { FILE *fp; fp = fopen("/tmp/test.txt", "w+"); fprintf(fp, "This is testing for fprintf...\n"); fputs("This is testing for fputs...\n", fp); fclose(fp); }
Lorsque le code ci-dessus est compilé et exécuté, il crée un nouveau fichier test.txt dans le répertoire /tmp et écrit deux lignes en utilisant deux fonctions différentes. Lisons ce fichier dans la section suivante.
Lire un fichier
Ci-dessous est la fonction la plus simple pour lire un seul caractère à partir d'un fichier −
int fgetc( FILE * fp );
Le fgetc() La fonction lit un caractère du fichier d'entrée référencé par fp. La valeur de retour est le caractère lu, ou en cas d'erreur, elle renvoie EOF . La fonction suivante permet de lire une chaîne depuis un flux −
char *fgets( char *buf, int n, FILE *fp );
Les fonctions fgets() lit jusqu'à n-1 caractères du flux d'entrée référencé par fp. Il copie la chaîne lue dans le tampon buf , en ajoutant un null caractère pour terminer la chaîne.
Si cette fonction rencontre un caractère de retour à la ligne '\n' ou la fin du fichier EOF avant qu'ils aient lu le nombre maximum de caractères, alors elle ne renvoie que les caractères lus jusqu'à ce point, y compris le caractère de retour à la ligne. Vous pouvez également utiliser int fscanf(FILE *fp, const char *format, ...) fonction pour lire les chaînes d'un fichier, mais elle arrête de lire après avoir rencontré le premier caractère d'espace.
#include <stdio.h> main() { FILE *fp; char buff[255]; fp = fopen("/tmp/test.txt", "r"); fscanf(fp, "%s", buff); printf("1 : %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("2: %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("3: %s\n", buff ); fclose(fp); }
Lorsque le code ci-dessus est compilé et exécuté, il lit le fichier créé dans la section précédente et produit le résultat suivant −
1 : This 2: is testing for fprintf... 3: This is testing for fputs...
Voyons un peu plus en détail ce qui s'est passé ici. Tout d'abord, fscanf() lisez simplement ceci car après cela, il a rencontré un espace, le deuxième appel est pour fgets() qui lit la ligne restante jusqu'à ce qu'il rencontre la fin de la ligne. Enfin, le dernier appel fgets() lit complètement la deuxième ligne.
Fonctions d'E/S binaires
Il y a deux fonctions, qui peuvent être utilisées pour l'entrée et la sortie binaires −
size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file); size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
Ces deux fonctions doivent être utilisées pour lire ou écrire des blocs de mémoires - généralement des tableaux ou des structures.
Langue C
- C Entrée Sortie (E/S)
- Gestion des fichiers C
- E/S de fichier Python
- Axiomtek :système riche en fonctionnalités pour les applications de vision industrielle
- acceed :modules d'E/S pour une communication de données évolutive
- C-Fonctions
- C - Fichiers d'en-tête
- Ce que sont les cartes d'E/S et comment elles fonctionnent
- MATLAB - Sortie de données