Participer au site avec un Tip
Rechercher
 

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 :

Fonction fopen

Entête à inclure

#include <stdio.h>  // <cstdio> en C++

Fonction fopen

FILE * fopen( const char * filename, const char * accessMode );                       // Avant C99
FILE * fopen( const char * restrict filename, const char * restrict accessMode );     // A partir de C99

Cette fonction permet d'ouvrir un flux de caractère basé sur fichier. Vous pouvez choisir entre différents modes d'ouverture du fichier (ouverture en lecture, en écriture, en ajout, ...) en fonction de vos besoins.

un processus C est limité quant au nombre de fichiers total qu'il peut ouvrir. Cette autre limite peut être connue via la macro FOPEN_MAX. Si vous cherchez à dépasser cette limite, une erreur sera produite.

Paramètres

Valeur de retour

L'ouverture d'un fichier peut échouer pour différentes raisons (problème de sécurité, fichier non existant, ...). Il est donc nécessaire de vérifier la valeur retournée par un appel à cette fonction. Si la valeur retournée est non nulle, alors tout c'est bien passé : dans ce cas, la valeur de retour (de type FILE *) correspond au descripteur du fichier ouvert.

Si, par contre, une valeur nulle vous est retournée, alors c'est qu'une erreur vient de survenir. Il vous faudra alors consulter la variable errno pour obtenir de plus amples informations sur l'erreur constatée.

Codes d'erreurs pouvant être retournés

les codes erreurs proposés ci-dessous ne sont pas définis dans C ISO, mais dans le standard POSIX (Portable Operating System Interface uniX).

EACCES (POSIX) : un problème de sécurité d'accès au fichier a été constaté.

EEXIST (POSIX) : impossible de créer un nom de fichier unique.

EINTR (POSIX) : l'appel a été interrompu par un signal.

EINVAL (POSIX): le mode d'ouverture du fichier que vous avez spécifié est invalide.

EMFILE (Error Max FILE - POSIX) : le nombre maximal de fichiers pouvant être ouvert par le processus est atteint.

ENFILE (POSIX) : le nombre maximal de fichiers pouvant être ouvert par le système d'exploitation est atteint.

ENOSPC (Error NO SPaCe - POSIX) : le répertoire est saturé et il n'est plus possible d'y ajouter un nouveau fichier.

EROFS (Error Read Only File System - POSIX) : le système de fichiers est en lecture seule.

...

Exemple de code

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char * argv[] ) {
    
    FILE * inputFile;
    
    argc--;   argv++;
    
    if ( argc == 0 ) {
        printf( "Usage: sample filename...\n" );
        exit( 0 );
    }
    
    inputFile = fopen( argv[0], "a" );
    if ( inputFile == NULL ) {
        printf( "Cannot open file %s\n", argv[0] );
        exit( 0 );
    }
    
    fprintf( inputFile, "Appending a new message in the file\n" );

    fclose( inputFile );
        
    return 0;
}

Conformité

C89 / C99 / C11 / C18

Sujets connexes

La structure FILE *

La fonction fclose
La fonction fprintf
La fonction fread
La fonction freopen
La fonction fscanf
La fonction fwrite
La fonction tmpfile