Accès rapide :
Les types de données proposés
Les fonctions d'ouverture et de fermeture de flux
Les fonctions de manipulation des flux
Les fonctions de formatage basées sur va_list
Les fonctions et macros de positionnement dans un flux
Les fonctions de gestion d'erreurs de manipulation de vos flux
Les fonctions de gestion des fichiers
Les autres fonctions de la librairie
Compléments documentés pour stdio.h
Cette librairie, certainement l'une des plus utilisées en C, permet principalement la manipulation des flux de caractères (que ce soit vers un fichier ou la console). Cette librairie propose aussi un ensemble de fonctions utiles pour la gestion de vos fichiers.
Le type FILE * (un pointeur sur une structure) permet de stocker les informations relatives à un flux de caractères.
Par exemple, lorsque vous manipulez un fichier (en lecture ou en écriture), vous manipulerez ce type de pointeurs pour représenter le fichier.
Mais ce type est aussi utilisé pour manipuler les flux de votre programme stdin, stdout
et stderr.
Le type fpos_t représente une position à l'intérieur d'un flux.
Voici un résumé de ces premiers éléments.
| Nom | Type | Description | Depuis |
|---|---|---|---|
| FILE * | Type | Un pointeur vers une structure de type FILE, associée à un fichier en cours d'utilisation. |
C89 |
| fpos_t | Type | Ce type représente une position à l'intérieur d'un flux. | C89 |
| stdin | Variable globale | Représente le flux standard d'entrée. Par défaut, il est associé à la saisie clavier sur la console. | C89 |
| stdout | Variable globale | Représente le flux standard de sortie. Par défaut, il est associé aux messages affichés sur la console. | C89 |
| stderr | Variable globale | Représente le flux standard d'erreur. Par défaut, il est lui aussi redirigé sur la console. | C89 |
Tout processus (donc programme) possède ces trois flux standards, comme le montre le diagramme ci-dessous.
Il est possible, sur un système d'exploitation quelconque de rediriger les flux standard à partir ou vers d'autres fichiers. Voici quelques exemples de syntaxes liées à la redirection des flux standards
| Commande | Signification |
|---|---|
| $> yourprogram < input.txt | L'entrée standard de votre programme est redirigée à partir du fichier input.txt. À partir de maintenant, les lectures à partir de stdin manipuleront ce fichier. |
| $> yourprogram > results.txt | Le flux standard de sortie est redirigé vers results.txt. Tous les affichages via printf, par exemple, se retrouveront dans ce fichier. |
| $> yourprogram 1> results.txt | Similaire à l'exemple précédent. |
| $> yourprogram 2> errors.txt | Le flux standard d'erreur est redirigé vers errors.txt. Toutes les erreurs seront transférées dans ce fichier. |
| $> yourprogram < input.txt 1> results.txt 2> errors.txt | Les trois flux standards de votre programme sont redirigés sur différents fichiers. |
Le tableau suivant liste les fonctions permettant d'ouvrir ou de fermer un fichier.
| Nom | Type | Description | Depuis |
|---|---|---|---|
| fclose | Fonction | Permet de fermer un flux préalablement ouvert avec la fonction fopen ou la fonction freopen. |
C89 |
| fopen | Fonction | Permet d'ouvrir un flux de caractères basé sur un fichier. | C89 |
| freopen | Fonction | Permet d'ouvrir un fichier en recyclant la structure FILE *. |
C89 |
| tmpfile | Fonction | Permet d'ouvrir un fichier binaire temporaire. | C89 |
Il existe un grand nombre de fonctions permettant de manipuler le contenu d'un fichier sous forme d'un flux d'octets
(d'un flux de caractères s'il s'agit d'un fichier texte). Ces fonctions sont très facilement reconnaissables : elles
commencent très souvent par un caractère f (par exemple, fclose).
| Nom | Type | Description | Depuis |
|---|---|---|---|
| feof | Fonction | Permet de déterminer si la position courante est en fin de fichier (de flux) ou non. | C89 |
| fflush | Fonction | Permet de synchroniser le buffer associé au flux. | C89 |
| fgetc | Fonction | Permet de lire le caractère à la position courante du flux considéré. | C89 |
| fgets | Fonction | Permet de lire la ligne de texte à partir de la position courante du flux considéré. | C89 |
| fprintf | Fonction | Permet d'envoyer une chaîne formatée dans le flux spécifié. | C89 |
| fputc | Fonction | Permet d'envoyer un caractère dans le flux spécifié. | C89 |
| fputs | Fonction | Permet d'ajouter une nouvelle ligne de texte dans le flux spécifié. | C89 |
| fread | Fonction | Permet de lire des blocs de données à partir du flux spécifié. | C89 |
| fscanf | Fonction | Permet de lire des données dans une chaîne formatée à partir du flux spécifié. | C89 |
| fwrite | Fonction | Permet d'écrire des blocs de données dans le flux spécifié. | C89 |
| getc | Fonction | Permet de lire le caractère à la position courante à partir de stdin. |
C89 |
| getchar | Fonction | Permet de lire le caractère à la position courante à partir de stdin. |
C89 |
| getline | Fonction | Permet de lire une ligne complète depuis un flux, en allouant ou en agrandissant automatiquement le buffer si nécessaire. | POSIX |
| gets | Fonction | Permet de lire la ligne de texte à partir de la position courante du flux stdin. |
C89 |
| printf | Fonction | Permet d'envoyer une chaîne formatée dans le flux stdout. |
C89 |
| putc | Fonction | Permet d'écrire un caractère dans le flux stdout. |
C89 |
| putchar | Fonction | Permet d'écrire un caractère dans le flux stdout. |
C89 |
| puts | Fonction | Permet d'ajouter une nouvelle ligne de texte dans le flux stdout. |
C89 |
| scanf | Fonction | Permet de lire des données dans une chaîne formatée à partir du flux stdin. |
C89 |
Les fonctions suivantes sont destinées aux fonctions qui manipulent elles-mêmes une liste de paramètres variables
via le type va_list.
| Nom | Type | Description | Depuis |
|---|---|---|---|
| vfprintf | Fonction | Permet d'envoyer une chaîne formatée dans le flux spécifié à partir d'une liste va_list. |
C89 |
| vprintf | Fonction | Permet d'envoyer une chaîne formatée dans le flux stdout à partir d'une liste va_list. |
C89 |
| vsprintf | Fonction | Permet d'envoyer des données formatées dans une chaîne de caractères à partir d'une liste va_list. |
C89 |
| vsnprintf | Fonction | Permet d'envoyer des données formatées dans une chaîne de caractères, en limitant la taille du buffer utilisé. | C99 |
| vfprintf_s | Fonction | Version C11 sécurisée de vfprintf, proposée par l'annexe K. |
C11 |
| vprintf_s | Fonction | Version C11 sécurisée de vprintf, proposée par l'annexe K. |
C11 |
| vsprintf_s | Fonction | Version C11 sécurisée de vsprintf, proposée par l'annexe K. |
C11 |
| vsnprintf_s | Fonction | Version C11 sécurisée de vsnprintf, proposée par l'annexe K. |
C11 |
La librairie <stdio.h> propose deux manières de gérer le positionnement dans un flux (dans un fichier).
Soit vous utilisez le couple de fonctions fgetpos/fsetpos soit
vous utilisez le couple ftell/fseek.
| Nom | Type | Description | Depuis |
|---|---|---|---|
| fgetpos | Fonction | Cette fonction permet de récupérer la position courante de la tête de lecture sur un fichier (ou plus généralement la position courante dans un flux). | C89 |
| fseek | Fonction | Cette fonction permet de modifier la position courante de la tête de lecture sur un fichier binaire (ou plus généralement la position courante dans un flux binaire). | C89 |
| fsetpos | Fonction | Cette fonction permet de changer la position courante de la tête de lecture sur un fichier (ou plus généralement la position courante dans un flux). | C89 |
| ftell | Fonction | Cette fonction permet de récupérer la position courante de la tête de lecture sur un fichier (ou plus généralement la position courante dans un flux). | C89 |
| rewind | Fonction | Cette fonction permet de réinitialiser un flux en plaçant la tête de lecture en début de fichier et en effaçant aussi l'indicateur d'erreur du flux. | C89 |
| SEEK_CUR | Macro | Permet le positionnement dans un flux à partir de la position courante. | C89 |
| SEEK_END | Macro | Permet le positionnement dans un flux à partir de sa fin. | C89 |
| SEEK_SET | Macro | Permet le positionnement dans un flux à partir de son début. | C89 |
| Nom | Type | Description | Depuis |
|---|---|---|---|
| clearerr | Fonction | Cette fonction permet de remettre à zéro l'indicateur d'erreur pour le flux de caractères considéré. | C89 |
| ferror | Fonction | Vérifie si le statut d'erreur est levé pour le flux spécifié. | C89 |
| perror | Fonction | Affiche sous forme textuelle, le message d'erreur associé à la variable errno. |
C89 |
Quelques fonctions permettent de gérer le fichier et non son contenu.
| Nom | Type | Description | Depuis |
|---|---|---|---|
| remove | Fonction | Permet de supprimer un fichier. | C89 |
| rename | Fonction | Permet de renommer un fichier. | C89 |
Et voici quelques autres fonctions proposées par le module <stdio.h>.
| Nom | Type | Description | Depuis |
|---|---|---|---|
| sprintf | Fonction | Permet d'envoyer des données formatées dans une chaîne de caractères. | C89 |
| snprintf | Fonction | Permet d'envoyer des données formatées dans une chaîne de caractères, en limitant la taille du buffer utilisé. | C99 |
| sscanf | Fonction | Permet de lire des données à partir d'une chaîne formatée. | C89 |
| tmpnam | Fonction | Permet de produire un nom de fichier unique et disponible au moment de l'invocation de la fonction. | C89 |
Les éléments suivants complètent la documentation de l'entête <stdio.h>, notamment pour les ajouts ISO récents et les extensions POSIX.
| Nom | Type | Description |
|---|---|---|
__STDC_VERSION_STDIO_H__ (C23) |
macro | Version de l'entête stdio.h. |
ctermid (POSIX) |
fonction | Construit le nom du terminal de contrôle du processus. |
dprintf (POSIX) |
fonction | Ecrit une chaîne formatée vers un descripteur de fichier POSIX. |
fdopen (POSIX) |
fonction | Associe un flux FILE * à un descripteur de fichier existant. |
fileno (POSIX) |
fonction | Retourne le descripteur POSIX associé à un flux FILE *. |
flockfile (POSIX) |
fonction | Verrouille un flux pour effectuer une séquence d'accès atomique côté bibliothèque C. |
fmemopen (POSIX) |
fonction | Ouvre un flux dont le stockage est un tampon mémoire. |
fopen_s (C11) |
fonction | Variante sécurisée optionnelle de la famille fopen. |
fprintf_s (C11) |
fonction | Variante sécurisée optionnelle de la famille fprintf. |
freopen_s (C11) |
fonction | Variante sécurisée optionnelle de la famille freopen. |
fscanf_s (C11) |
fonction | Variante sécurisée optionnelle de la famille fscanf. |
fseeko (POSIX) |
fonction | Déplace la position d'un flux en utilisant le type POSIX off_t. |
ftello (POSIX) |
fonction | Retourne la position courante d'un flux sous forme de off_t. |
ftrylockfile (POSIX) |
fonction | Tente de verrouiller un flux sans bloquer si le verrou n'est pas disponible. |
funlockfile (POSIX) |
fonction | Libère un verrou acquis sur un flux avec flockfile ou ftrylockfile. |
getc |
fonction | Lit le prochain caractère d'un flux. Cette interface peut être implémentée sous forme de macro. |
getc_unlocked (POSIX) |
fonction | Version non verrouillée de getc. |
getchar |
fonction | Lit le prochain caractère depuis l'entrée standard. |
getchar_unlocked (POSIX) |
fonction | Version non verrouillée de getchar. |
getdelim (POSIX) |
fonction | Lit dynamiquement une séquence de caractères jusqu'à un délimiteur. |
gets_s (C11) |
fonction | Variante sécurisée optionnelle de la famille gets. |
open_memstream (POSIX) |
fonction | Ouvre un flux d'écriture qui construit automatiquement un tampon mémoire. |
pclose (POSIX) |
fonction | Ferme un flux ouvert par popen et attend la fin de la commande associée. |
popen (POSIX) |
fonction | Ouvre un flux connecté à l'entrée ou à la sortie d'une commande shell. |
printf |
fonction | Ecrit une chaîne formatée sur la sortie standard. |
printf_s (C11) |
fonction | Variante sécurisée optionnelle de la famille printf. |
putc |
fonction | Ecrit un caractère dans un flux. Cette interface peut être implémentée sous forme de macro. |
putc_unlocked (POSIX) |
fonction | Version non verrouillée de putc. |
putchar |
fonction | Ecrit un caractère sur la sortie standard. |
putchar_unlocked (POSIX) |
fonction | Version non verrouillée de putchar. |
puts |
fonction | Ecrit une chaîne suivie d'un saut de ligne sur la sortie standard. |
renameat (POSIX) |
fonction | Renomme une entrée relativement à deux descripteurs de répertoire. |
scanf |
fonction | Lit des données formatées depuis l'entrée standard. |
scanf_s (C11) |
fonction | Variante sécurisée optionnelle de la famille scanf. |
setbuf |
fonction | Configure simplement le tampon associé à un flux. |
setvbuf |
fonction | Configure précisément le mode et la taille du tampon associé à un flux. |
snprintf_s (C11) |
fonction | Variante sécurisée optionnelle de la famille snprintf. |
sprintf |
fonction | Ecrit une chaîne formatée dans un tampon. |
sprintf_s (C11) |
fonction | Variante sécurisée optionnelle de la famille sprintf. |
sscanf |
fonction | Lit des données formatées depuis une chaîne. |
sscanf_s (C11) |
fonction | Variante sécurisée optionnelle de la famille sscanf. |
tmpfile_s (C11) |
fonction | Variante sécurisée optionnelle de la famille tmpfile. |
tmpnam_s (C11) |
fonction | Variante sécurisée optionnelle de la famille tmpnam. |
ungetc |
fonction | Replace un caractère dans le flux d'entrée. |
vdprintf (POSIX) |
fonction | Version va_list de dprintf. |
vfscanf (C99) |
fonction | Version va_list de fscanf. |
vfscanf_s (C11) |
fonction | Variante sécurisée optionnelle de la famille vfscanf. |
vprintf |
fonction | Version va_list de printf. |
vprintf_s (C11) |
fonction | Variante sécurisée optionnelle de la famille vprintf. |
vscanf (C99) |
fonction | Version va_list de scanf. |
vscanf_s (C11) |
fonction | Variante sécurisée optionnelle de la famille vscanf. |
vsnprintf (C99) |
fonction | Version bornée et va_list de snprintf. |
vsnprintf_s (C11) |
fonction | Variante sécurisée optionnelle de la famille vsnprintf. |
vsprintf |
fonction | Version va_list de sprintf. |
vsprintf_s (C11) |
fonction | Variante sécurisée optionnelle de la famille vsprintf. |
vsscanf (C99) |
fonction | Version va_list de sscanf. |
vsscanf_s (C11) |
fonction | Variante sécurisée optionnelle de la famille vsscanf. |
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :