Namespaces
Variants

fopen, fopen_s

From cppreference.net
< c ‎ | io
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,

const char * restrict mode ) ;
(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 :
  • streamptr est un pointeur nul
  • filename est un pointeur nul
  • mode est un pointeur nul
Comme pour toutes les fonctions à vérification de limites, 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

#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)
ouvre un flux existant avec un nom différent
(fonction)