Entrée/sortie de fichier C - C file input/output
bibliothèque standard C |
---|
Thèmes généraux |
En-têtes divers |
|
Le langage de programmation C fournit de nombreuses fonctions de bibliothèque standard pour l' entrée et la sortie de fichiers . Ces fonctions constituent l'essentiel de l'en - tête de bibliothèque standard C <stdio.h> . La fonctionnalité descend d'un "package d'E/S portable" écrit par Mike Lesk chez Bell Labs au début des années 1970, et est officiellement devenu une partie du système d' exploitation Unix dans la version 7 .
La fonctionnalité d'E/S de C est de niveau assez bas par rapport aux normes modernes ; C résume toutes les opérations de fichier en opérations sur des flux d' octets , qui peuvent être des "flux d'entrée" ou des "flux de sortie". Contrairement à certains langages de programmation antérieurs, C ne prend pas directement en charge les fichiers de données à accès aléatoire ; pour lire à partir d'un enregistrement au milieu d'un fichier, le programmeur doit créer un flux, chercher au milieu du fichier, puis lire les octets en séquence à partir du flux.
Le modèle de flux d'E/S de fichiers a été popularisé par Unix, qui a été développé en même temps que le langage de programmation C lui-même. La grande majorité des systèmes d'exploitation modernes ont hérité des flux d'Unix, et de nombreux langages de la famille des langages de programmation C ont hérité de l'interface d'E/S de fichiers C avec peu ou pas de changements (par exemple, PHP ).
Aperçu
Cette bibliothèque utilise ce qu'on appelle des flux pour fonctionner avec des périphériques physiques tels que des claviers, des imprimantes, des terminaux ou avec tout autre type de fichiers pris en charge par le système. Les flux sont une abstraction pour interagir avec ceux-ci de manière uniforme. Tous les flux ont des propriétés similaires indépendamment des caractéristiques individuelles du support physique auquel ils sont associés.
Les fonctions
La plupart des fonctions d'entrée/sortie du fichier C sont définies dans <stdio.h> (ou dans l'en-tête C++ cstdio , qui contient la fonctionnalité C standard mais dans l' espace de noms std ).
Caractère d' octet |
Caractère large |
La description | |
---|---|---|---|
Accès aux fichiers | ouvrir | Ouvre un fichier (avec un nom de fichier non Unicode sous Windows et éventuellement un nom de fichier UTF-8 sous Linux) | |
libre | Ouvre un fichier différent avec un flux existant | ||
chasser | Synchronise un flux de sortie avec le fichier réel | ||
fermer | Ferme un fichier | ||
setbuf | Définit le tampon pour un flux de fichiers | ||
setvbuf | Définit le tampon et sa taille pour un flux de fichiers | ||
large | Bascule un flux de fichiers entre les E/S à caractères larges et les E/S à caractères étroits | ||
Entrée/sortie directe |
peur | Lit à partir d'un fichier | |
fécrire | Écrit dans un fichier | ||
Entrée/sortie non formatée |
fgetc getc |
fgetwc getwc |
Lit un octet/ wchar_t à partir d'un flux de fichiers |
fgets | fgetws | Lit une ligne byte/ wchar_t à partir d'un flux de fichiers | |
fputc putc |
putwc putwc |
Écrit un octet/ wchar_t dans un flux de fichiers | |
fputs | fputws | Écrit une chaîne d' octets/ wchar_t dans un flux de fichiers | |
obtenirchar | getwchar | Lit un octet/ wchar_t à partir de stdin | |
|
N / A | Lit une chaîne d'octets à partir de stdin jusqu'à ce qu'une nouvelle ligne ou une fin de fichier soit rencontrée (obsolète en C99, supprimée de C11) | |
putchar | putwchar | Écrit un octet/ wchar_t sur stdout | |
met | N / A | Écrit une chaîne d'octets sur stdout | |
ungetc | ungetwc | Remet un octet/ wchar_t dans un flux de fichiers | |
Entrée/sortie formatée |
scanf fscanf sscanf |
wscanf fwscanf swscanf |
Lit l' entrée byte/ wchar_t formatée à partir de stdin, d' un flux de fichier ou d'un tampon |
vscanf vfscanf vsscanf |
vwscanf vfwscanf vswscanf |
Lit l'octet d'entrée formaté/ wchar_t à partir de stdin, d' un flux de fichier ou d'un tampon à l'aide d'une liste d'arguments variables |
|
printf fprintf sprintf snprintf |
wprintf fwprintf swprintf |
Imprime la sortie formatée byte/ wchar_t vers stdout, un flux de fichier ou un tampon |
|
vprintf vfprintf vsprintf vsnprintf |
vwprintf vfwprintf vswprintf |
Imprime la sortie byte/ wchar_t formatée vers stdout, un flux de fichiers ou un tampon à l'aide d'une liste d'arguments variables |
|
erreur | N / A | Écrit une description de l' erreur actuelle dans stderr | |
Positionnement du fichier |
ftell ftello |
Renvoie l'indicateur de position actuelle du fichier | |
fseek fseeko |
Déplace l'indicateur de position de fichier vers un emplacement spécifique dans un fichier | ||
fgetpos | Obtient l'indicateur de position du fichier | ||
fsetpos | Déplace l'indicateur de position de fichier vers un emplacement spécifique dans un fichier | ||
rembobiner | Déplace l'indicateur de position de fichier au début d'un fichier | ||
Gestion des erreurs |
plus clair | Efface les erreurs | |
feof | Vérifie la fin du fichier | ||
la peur | Recherche une erreur de fichier | ||
Opérations sur les fichiers |
supprimer | Efface un fichier | |
Renommer | Renomme un fichier | ||
fichier tmp | Renvoie un pointeur vers un fichier temporaire | ||
tmpnam | Renvoie un nom de fichier unique |
Constantes
Les constantes définies dans l'en- tête <stdio.h> incluent :
Nom | Remarques |
---|---|
FEO | Un entier négatif de type int utilisé pour indiquer les conditions de fin de fichier |
BUFSIZ | Un entier qui correspond à la taille de la mémoire tampon utilisée par la setbuf () fonction |
FILENAME_MAX | La taille d'un omble tableau qui est assez grand pour stocker le nom d'un fichier qui peut être ouvert |
FOPEN_MAX | Le nombre de fichiers pouvant être ouverts simultanément ; aura au moins huit |
_IOFBF | Une abréviation pour « entrée/sortie entièrement tamponnée » ; il s'agit d'un entier qui peut être passé à la fonction setvbuf() pour demander une entrée et une sortie tamponnées par bloc pour un flux ouvert |
_IOLBF | Une abréviation pour "ligne d'entrée/sortie tamponnée" ; c'est un entier qui peut être passé à la fonction setvbuf() pour demander une entrée et une sortie en tampon de ligne pour un flux ouvert |
_IONBF | Une abréviation pour « input/output not buffered » ; il est un nombre entier qui peut être transmise à la setvbuf () fonction de la demande sans tampon d' entrée et de sortie pour un flux ouvert |
L_tmpnam | La taille d'une carbonisation réseau qui est assez grande pour stocker un nom de fichier temporaire généré par le tmpnam () fonction |
NUL | Une macro qui s'étend jusqu'à la constante de pointeur nul ; c'est-à-dire une constante représentant une valeur de pointeur qui est garantie de ne pas être une adresse valide d'un objet en mémoire |
SEEK_CUR | Un entier qui peut être passé à la fonction fseek() pour demander un positionnement par rapport à la position actuelle du fichier |
SEEK_END | Un entier qui peut être passé à la fonction fseek() pour demander un positionnement par rapport à la fin du fichier |
SEEK_SET | Un entier qui peut être passé à la fonction fseek() pour demander un positionnement par rapport au début du fichier |
TMP_MAX | Le nombre maximum de noms de fichiers uniques pouvant être générés par la fonction tmpnam() ; aura au moins 25 ans |
Variables
Les variables définies dans l'en- tête <stdio.h> incluent :
Nom | Remarques |
---|---|
standard | Un pointeur vers un FICHIER qui fait référence au flux d'entrée standard, généralement un clavier. |
sortie standard | Un pointeur vers un FICHIER qui fait référence au flux de sortie standard, généralement un terminal d'affichage. |
stderr | Un pointeur vers un FICHIER qui fait référence au flux d'erreur standard, souvent un terminal d'affichage. |
Types de membres
Les types de données définis dans l'en- tête <stdio.h> incluent :
-
FICHIER – également connu sous le nom dedescripteur de fichier , il s'agit d'un type opaque contenant les informations sur un fichier ou un flux de texte nécessaires pour effectuer des opérations d'entrée ou de sortie sur celui-ci, notamment :
- identifiant spécifique à la plate-forme du périphérique d'E/S associé, tel qu'un descripteur de fichier
- le tampon
- indicateur d'orientation du flux (non défini, étroit ou large)
- indicateur d'état de mise en mémoire tampon de flux (sans tampon, ligne en mémoire tampon, entièrement en mémoire tampon)
- Indicateur de mode d'E/S (flux d'entrée, flux de sortie ou flux de mise à jour)
- indicateur de mode binaire/texte
- indicateur de fin de fichier
- indicateur d'erreur
- la position actuelle du flux et l'état de conversion multi-octets (un objet de type mbstate_t)
- serrure réentrante (obligatoire à partir de C11 )
- fpos_t - un type non tableau capable d'identifier de manière unique la position de chaque octet dans un fichier et chaque état de conversion qui peut se produire dans tous les codages de caractères multi-octets pris en charge
- size_t – un type entier non signé qui est le type du résultat de l' opérateur sizeof .
Rallonges
Le standard POSIX définit plusieurs extensions à stdio dans ses définitions de base, parmi lesquelles une fonction readline qui alloue de la mémoire, les fonctions fileno et fdopen qui établissent le lien entre les objets FILE et les descripteurs de fichiers , et un groupe de fonctions pour créer des objets FILE qui font référence aux tampons en mémoire.
Exemple
Le programme C suivant ouvre un fichier binaire appelé myfile , en lit cinq octets, puis ferme le fichier.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char buffer[5];
FILE* fp = fopen("myfile", "rb");
if (fp == NULL) {
perror("Failed to open file \"myfile\"");
return EXIT_FAILURE;
}
for (int i = 0; i < 5; i++) {
int rc = getc(fp);
if (rc == EOF) {
fputs("An error occurred while reading the file.\n", stderr);
return EXIT_FAILURE;
}
buffer[i] = rc;
}
fclose(fp);
printf("The bytes read were... %x %x %x %x %x\n", buffer[0], buffer[1],
buffer[2], buffer[3], buffer[4]);
return EXIT_SUCCESS;
}
Alternatives à stdio
Plusieurs alternatives à stdio ont été développées. Parmi celles-ci se trouve la bibliothèque C++ iostream , qui fait partie de la norme ISO C++ . ISO C++ nécessite toujours la fonctionnalité stdio .
D'autres alternatives incluent la bibliothèque SFIO (A Safe/Fast I/O Library) d' AT&T Bell Laboratories . Cette bibliothèque, introduite en 1991, visait à éviter les incohérences, les pratiques dangereuses et les inefficacités dans la conception de stdio . Parmi ses fonctionnalités, il y a la possibilité d'insérer des fonctions de rappel dans un flux pour personnaliser la gestion des données lues ou écrites dans le flux. Il est sorti dans le monde extérieur en 1997, et la dernière sortie date du 1er février 2005.
Voir également
Les références
Liens externes
- Médias liés à l' entrée/sortie de fichiers C sur Wikimedia Commons