fopen, fopen_s
From cppreference.net
|
Défini dans l'en-tête
<stdio.h>
|
||
| (1) | ||
|
FILE
*
fopen
(
const
char
*
filename,
const
char
*
mode
)
;
|
(jusqu'à C99) | |
|
FILE
*
fopen
(
const
char
*
restrict
filename,
const
char
*
restrict
mode
)
;
|
(depuis C99) | |
|
errno_t fopen_s
(
FILE
*
restrict
*
restrict
streamptr,
const
char
*
restrict
filename,
|
(2) | (depuis C11) |
1)
Ouvre un fichier indiqué par
filename
et retourne un pointeur vers le flux de fichier associé à ce fichier.
mode
est utilisé pour déterminer le mode d'accès au fichier.
2)
Identique à
(1)
, sauf que le pointeur vers le flux de fichier est écrit dans
streamptr
et les erreurs suivantes sont détectées à l'exécution et appellent la fonction
gestionnaire de contraintes
actuellement installée :
-
-
streamptrest un pointeur nul -
filenameest un pointeur nul -
modeest un pointeur nul
-
fopen_s
est uniquement garantie d'être disponible si
__STDC_LIB_EXT1__
est défini par l'implémentation et si l'utilisateur définit
__STDC_WANT_LIB_EXT1__
à la constante entière
1
avant d'inclure
<stdio.h>
.
Table des matières |
Paramètres
| filename | - | nom de fichier à associer au flux de fichier |
| mode | - | chaîne de caractères terminée par un caractère nul déterminant le mode d'accès au fichier |
| streamptr | - | pointeur vers un pointeur où la fonction stocke le résultat (un paramètre de sortie) |
Drapeaux d'accès aux fichiers
|
Chaîne de mode
d'accès au fichier |
Signification | Explication |
Action si le fichier
existe déjà |
Action si le fichier
n'existe pas |
|---|---|---|---|---|
| "r" | lecture | Ouvrir un fichier en lecture | lecture depuis le début | échec de l'ouverture |
| "w" | écriture | Créer un fichier en écriture | détruire le contenu | créer un nouveau |
| "a" | append | Ajouter à un fichier | écriture à la fin | créer un nouveau |
| "r+" | lecture étendue | Ouvrir un fichier en lecture/écriture | lecture depuis le début | erreur |
| "w+" | écriture étendue | Créer un fichier en lecture/écriture | détruire le contenu | créer un nouveau |
| "a+" | append étendu | Ouvrir un fichier en lecture/écriture | écriture à la fin | créer un nouveau |
|
Le drapeau de mode d'accès
"b"
peut être spécifié optionnellement pour ouvrir un fichier en mode binaire. Ce drapeau n'a aucun effet sur les systèmes POSIX, mais sous Windows il désactive le traitement spécial de
'
\n
'
et
'
\x1A
'
.
Dans les modes d'accès en append, les données sont écrites à la fin du fichier indépendamment de la position courante de l'indicateur de position. |
||||
| Le comportement est indéfini si le mode n'est pas une des chaînes listées ci-dessus. Certaines implémentations définissent des modes supplémentaires supportés (ex. Windows ). | ||||
| En mode mise à jour ( '+' ), les entrées et sorties peuvent être effectuées, mais une sortie ne peut pas être suivie d'une entrée sans un appel intermédiaire à fflush , fseek , fsetpos ou rewind , et une entrée ne peut pas être suivie d'une sortie sans un appel intermédiaire à fseek , fsetpos ou rewind , sauf si l'opération d'entrée a rencontré la fin du fichier. En mode mise à jour, les implémentations sont autorisées à utiliser le mode binaire même quand le mode texte est spécifié. | ||||
| Le drapeau de mode d'accès "x" peut être ajouté optionnellement aux spécificateurs "w" ou "w+" . Ce drapeau force la fonction à échouer si le fichier existe, au lieu de l'écraser. (C11) | ||||
| Lors de l'utilisation de fopen_s ou freopen_s , les permissions d'accès pour tout fichier créé avec "w" ou "a" empêchent les autres utilisateurs d'y accéder. Le drapeau de mode d'accès "u" peut être préfixé optionnellement à tout spécificateur commençant par "w" ou "a" , pour activer les permissions par défaut de fopen . (C11) | ||||
Valeur de retour
1)
En cas de succès, retourne un pointeur vers le nouveau flux de fichier. Le flux est entièrement tamponné sauf si
filename
fait référence à un dispositif interactif. En cas d'erreur, retourne un pointeur nul.
POSIX exige
que
errno
soit défini dans ce cas.
2)
En cas de succès, retourne zéro et un pointeur vers le nouveau flux de fichier est écrit dans
*
streamptr
. En cas d'erreur, retourne un code d'erreur non nul et écrit le pointeur nul dans
*
streamptr
(sauf si
streamptr
est lui-même un pointeur nul).
Notes
Le format de
filename
est défini par l'implémentation, et ne fait pas nécessairement référence à un fichier (par exemple, il peut s'agir de la console ou d'un autre périphérique accessible via l'API du système de fichiers). Sur les plates-formes qui les prennent en charge,
filename
peut inclure un chemin absolu ou relatif du système de fichiers.
Exemple
Exécuter ce code
#include <stdio.h> #include <stdlib.h> int main(void) { const char* fname = "/tmp/unique_name.txt"; // or tmpnam(NULL); int is_ok = EXIT_FAILURE; FILE* fp = fopen(fname, "w+"); if (!fp) { perror("File opening failed"); return is_ok; } fputs("Hello, world!\n", fp); rewind(fp); int c; // note: int, not char, required to handle EOF while ((c = fgetc(fp)) != EOF) // standard C I/O file reading loop putchar(c); if (ferror(fp)) puts("I/O error when reading"); else if (feof(fp)) { puts("End of file is reached successfully"); is_ok = EXIT_SUCCESS; } fclose(fp); remove(fname); return is_ok; }
Sortie possible :
Hello, world! End of file is reached successfully
Références
- Norme C17 (ISO/CEI 9899:2018):
-
- 7.21.5.3 La fonction fopen (p: 223-224)
-
- K.3.5.2.1 La fonction fopen_s (p: 428-429)
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.21.5.3 La fonction fopen (p: 305-306)
-
- K.3.5.2.1 La fonction fopen_s (p: 588-590)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.19.5.3 La fonction fopen (p : 271-272)
- Norme C89/C90 (ISO/CEI 9899:1990) :
-
- 4.9.5.3 La fonction fopen
Voir aussi
|
ferme un fichier
(fonction) |
|
|
synchronise un flux de sortie avec le fichier actuel
(fonction) |
|
|
(C11)
|
ouvre un flux existant avec un nom différent
(fonction) |
|
Documentation C++
pour
fopen
|
|