FILE
|
Défini dans l'en-tête
<stdio.h>
|
||
|
typedef
/* non spécifié */
FILE
;
|
||
Chaque
FILE
objet désigne un flux C.
La norme C ne spécifie pas si
FILE
est un type d'objet complet. Bien qu'il puisse être possible de copier un
FILE
valide, l'utilisation d'un pointeur vers une telle copie comme argument pour une fonction d'E/S invoque un comportement non spécifié. En d'autres termes,
FILE
peut être sémantiquement non copiable.
Les flux d'E/S peuvent être utilisés à la fois pour les entrées et sorties formatées et non formatées. De plus, les fonctions qui gèrent les entrées et sorties peuvent également être sensibles aux paramètres régionaux, de sorte que les conversions larges/multioctets sont effectuées si nécessaire.
Table des matières |
État du flux
En plus des informations spécifiques au système nécessaires pour accéder au périphérique (
par exemple,
un descripteur de fichier POSIX), chaque objet
FILE
contient directement ou indirectement les éléments suivants :
- (C95) Largeur de caractère : non définie, étroite ou large.
- (C95) État d'analyse pour les conversions entre caractères multioctets et caractères larges (un objet de type mbstate_t )
- État de la mise en mémoire tampon : sans tampon, avec tampon de ligne, avec tampon complet.
- Le tampon, qui peut être remplacé par un tampon externe fourni par l'utilisateur.
- Mode d'E/S : entrée, sortie ou mise à jour (entrée et sortie).
- Indicateur de mode binaire/texte.
- Indicateur d'état de fin de fichier.
- Indicateur d'état d'erreur.
- Indicateur de position de fichier, accessible en tant qu'objet de type fpos_t , qui, pour les flux larges, inclut l'état d'analyse.
- (C11) Verrou réentrant utilisé pour empêcher les conditions de compétition lorsque plusieurs threads lisent, écrivent, positionnent ou interrogent la position d'un flux.
Orientation étroite et large
Un flux nouvellement ouvert n'a pas d'orientation. Le premier appel à fwide ou à toute fonction d'E/S établit l'orientation : une fonction d'E/S larges rend le flux orienté large ; une fonction d'E/S étroites rend le flux orienté étroit. Une fois définie, l'orientation ne peut être modifiée qu'avec freopen . Les fonctions d'E/S étroites ne peuvent pas être appelées sur un flux orienté large ; les fonctions d'E/S larges ne peuvent pas être appelées sur un flux orienté étroit. Les fonctions d'E/S larges convertissent entre les caractères larges et les caractères multioctets comme si elles appelaient mbrtowc ou wcrtomb avec l'état de conversion décrit par le flux. Contrairement aux chaînes de caractères multioctets valides dans un programme, les séquences de caractères multioctets dans le fichier peuvent contenir des caractères nuls incorporés et ne doivent pas nécessairement commencer ou se terminer dans l'état de décalage initial.
L'état de conversion d'un flux avec orientation large est établi par les paramètres régionaux C qui sont installés au moment où l'orientation du flux est définie.
Modes binaire et texte
Un flux de texte est une séquence ordonnée de caractères pouvant être composée en lignes ; une ligne peut être décomposée en zéro ou plusieurs caractères plus un caractère de fin de ligne ' \n ' (« newline »). Le fait que la dernière ligne nécessite un ' \n ' terminal est défini par l'implémentation. De plus, des caractères peuvent devoir être ajoutés, modifiés ou supprimés lors de l'entrée et de la sortie pour se conformer aux conventions de représentation du texte dans le système d'exploitation (en particulier, les flux C sous Windows convertissent ' \n ' en ' \r \n ' en sortie, et convertissent ' \r \n ' en ' \n ' en entrée).
Les données lues à partir d'un flux texte sont garanties d'être comparables comme égales aux données précédemment écrites dans ce flux uniquement si chacune des conditions suivantes est vraie :
- Les données consistent uniquement en caractères imprimables et/ou les caractères de contrôle ' \t ' et ' \n ' (en particulier, sur le système d'exploitation Windows, le caractère ' \0 x1A' termine l'entrée).
- Aucun caractère ' \n ' n'est immédiatement précédé par des caractères d'espacement (ces caractères d'espacement peuvent disparaître lorsque cette sortie est ultérieurement lue en entrée).
- Le dernier caractère est ' \n ' .
Un flux binaire est une séquence ordonnée de caractères qui peut enregistrer de manière transparente des données internes. Les données lues depuis un flux binaire sont toujours égales aux données précédemment écrites dans ce flux, sauf qu'une implémentation est autorisée à ajouter un nombre indéterminé de caractères nuls à la fin du flux. Un flux binaire large n'a pas besoin de se terminer dans l'état de décalage initial.
Notes
POSIX exige explicitement que le
LC_CTYPE
de la locale C actuellement installée soit stocké dans l'objet
FILE
au moment où l'orientation du flux devient large ; POSIX exige que ce
LC_CTYPE
soit utilisé pour toutes les entrées/sorties futures sur ce flux jusqu'à ce que l'orientation soit modifiée, indépendamment de tout appel ultérieur à
setlocale
.
Il est prévu que chaque ligne de texte soit composée de données essentiellement lisibles par l'humain. Les implémentations POSIX ne font pas de distinction entre les flux de texte et binaires (il n'y a pas de mappage spécial pour ' \n ' ou tout autre caractère).
Références
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.21 Entrées/sorties <stdio.h> (p : 217-247)
-
- 7.29 Utilitaires de caractères larges et multioctets étendus <wchar.h> (p : 295-325)
- Norme C11 (ISO/IEC 9899:2011) :
-
- 7.21 Entrée/sortie <stdio.h> (p: 296-339)
-
- 7.29 Utilitaires de caractères larges et multioctets étendus <wchar.h> (p: 402-446)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.19 Entrées/sorties <stdio.h> (p : 262-305)
-
- 7.24 Utilitaires de caractères larges et multioctets étendus <wchar.h> (p : 348-392)
- Norme C89/C90 (ISO/IEC 9899:1990) :
-
- 4.9 INPUT/OUTPUT <stdio.h>
Voir aussi
|
expression de type
FILE
*
associée au flux d'entrée
expression de type FILE * associée au flux de sortie expression de type FILE * associée au flux de sortie d'erreur (constante macro) |
|
|
Documentation C++
pour
FILE
|
|