freopen

FOPEN(3)                  Manuel du programmeur Linux                 FOPEN(3)



NOM
       fopen, fdopen, freopen - Fonctions d'ouverture de flux

SYNOPSIS
       #include <stdio.h>

       FILE *fopen(const char *path, const char *mode);

       FILE *fdopen(int fd, const char *mode);

       FILE *freopen(const char *path, const char *mode, FILE *stream);

   Exigences de macros de test de fonctionnalités pour la glibc (consultez
   feature_test_macros(7)) :

       fdopen() : _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE

DESCRIPTION
       La fonction fopen() ouvre le fichier dont le nom est contenu dans la
       chaîne pointée par path et lui associe un flux.

       L'argument mode pointe vers une chaîne commençant par l'une des
       séquences suivantes (éventuellement suivie par des caractères
       supplémentaires, conformément à la description ci-dessous).

       r      Ouvre le fichier en lecture. Le pointeur de flux est placé au
              début du fichier.

       r+     Ouvre le fichier en lecture et écriture. Le pointeur de flux
              est placé au début du fichier.

       w      Tronque le fichier à son début ou ouvre le fichier en
              écriture. Le pointeur de flux est placé au début du fichier.

       w+     Ouvre le fichier en lecture et écriture. Le fichier est créé
              s'il n'existait pas. S'il existait déjà , sa longueur est
              ramenée à 0. Le pointeur de flux est placé au début du
              fichier.

       a      Ouvre le fichier en ajout (écriture à la fin du fichier). Le
              fichier est créé s'il n'existait pas. Le pointeur de flux est
              placé à la fin du fichier.

       a+     Ouvre le fichier en lecture et ajout (écriture en fin de
              fichier). Le fichier est créé s'il n'existait pas. La position
              initiale du fichier pour la lecture est en début de fichier,
              mais les ajouts sont toujours placés à la fin du fichier.

       La chaîne mode peut également inclure la lettre « b » comme dernier
       caractère, ou même entre les deux caractères d'une des séquences Ã
       2 caractères vues ci-dessus. Ce mode sert uniquement à assurer la
       compatibilité avec C89 et n'a aucun effet. Le « b » est ignoré sur
       tous les systèmes compatibles POSIX, y compris Linux (d'autres
       systèmes peuvent traiter les fichiers textes et les fichiers binaires
       différemment, et l'ajout du « b » peut être une bonne idée si vous
       faites des entrées/sorties sur un fichier binaire et que votre
       programme risque d'être porté sur un environnement non UNIX).

       Consultez la section NOTES ci-dessous pour le détails des extensions
       de la glibc pour mode.

       Tout fichier créé aura le mode S_IRUSR | S_IWUSR | S_IRGRP |
       S_IWGRP | S_IROTH | S_IWOTH (0666), qui sera ensuite modifié par la
       valeur d'umask du processus. Consultez umask(2).

       Les lectures et les écritures peuvent être mélangées sur les flux
       en lecture et écriture, dans un ordre quelconque. Notez que AINSI C
       nécessite qu'une fonction de positionnement dans le fichier soit
       appelée entre une lecture et une écriture, à moins que l'opération
       de lecture atteigne la fin du fichier(si cette condition n'est pas
       rencontrée, alors une lecture est permise pour renvoyer le résultat
       d'une écriture autre que la dernière). Une bonne habitude (souvent
       nécessaire sous Linux) consiste donc à intercaler un fseek(3) ou
       fgetpos(3) entre les lectures et les écritures sur le même flux. Ces
       opérations peuvent être visiblement sans effet comme fseek(..., 0L,
       SEEK_CUR) et ne servant que pour l'effet de bord de synchronisation.

       Ouvrir un fichier en mode ajout (a comme le premier caractère dans le
       mode) feront agir toutes les opérations d'écriture à la fin du flux,
       comme si elles étaient précédées par l'appel :

           fseek(stream, 0, SEEK_END);

       La fonction fdopen() associe un flux avec un descripteur de fichier fd
       existant. Le mode du flux (une des valeurs, « r », « "r+ »,
       « w », « w+ », « a », ou « a+ ») doit être compatible avec
       celui du descripteur de fichier. L'indicateur de position du nouveau
       flux prend la même valeur que celui de fd, et les indicateurs d'erreur
       et de fin de fichier sont effacés. Les modes « w » et « w+ » ne
       tronquent pas le fichier. Le descripteur n'est pas dupliqué, et sera
       fermé lorsque le flux créé par fdopen() sera fermé. L'appel de
       fdopen() sur un objet en mémoire partagée est indéfini.

       La fonction freopen() ouvre le fichier dont le nom se trouve dans la
       chaîne de caractères pointée par path et lui associe le flux pointé
       par stream. Le flux original, s'il existe, est fermé. L'argument mode
       est utilisé exactement comme avec fopen(). La principale utilisation
       de freopen() est de modifier le fichier associé aux flux standard de
       texte (stderr, stdin, ou stdout).

VALEUR RENVOYÃE
       Si elles réussissent intégralement, fopen(), fdopen() et freopen()
       renvoient un pointeur de type FILE. Sinon, elles renvoient NULL et
       errno contient le code d'erreur.

ERREURS
       EINVAL Le mode fourni à fopen(), fdopen(), ou freopen() était
              invalide.

       Les fonctions fopen(), fdopen() et freopen() peuvent également
       échouer et définir dans errno une des erreurs spécifiées par
       malloc(3).

       La fonction fopen() peut aussi échouer et définir dans errno une des
       erreurs spécifiées par open(2).

       La fonction fdopen() peut aussi échouer et définir dans errno une des
       erreurs spécifiées par fcntl(2).

       La fonction freopen() peut aussi échouer et définir dans errno une
       des erreurs spécifiées par open(2), fclose(3) et fflush(3).

CONFORMITÃ
       Les fonctions fopen() et freopen() sont conformes à C89. La fonction
       fdopen() est conforme à POSIX.1-1990.

NOTES
   Notes sur la glibc
       La bibliothèque GNU C permet les extensions suivantes pour la chaîne
       spécifiée par mode :

       c (depuis la glibc 2.3.3)
              Ne pas faire de l'opération d'ouverture, ou des opérations de
              lectures et écritures ultérieures, des points d'annulation de
              thread. Cet attribut est ignoré pour fdopen().

       e (depuis la glibc 2.7)
              Ouvrir le fichier avec l'attribut O_CLOEXEC. Consultez open(2)
              pour de plus amples renseignements. Cet attribut est ignoré
              pour fdopen().

       m (depuis la glibc 2.3)
              Essayer d'accéder au fichier avec mmap(2), au lieu des appels
              système d'entrées/sorties (read(2), write(2)). Actuellement,
              l'utilisation de mmap(2) n'est seulement tentée que pour un
              fichier ouvert en lecture.

       x      Ouvrir le fichier de manière exclusive (comme avec l'attribut
              O_EXCL de open(2)). Si le fichier existe déjà , fopen() échoue
              et errno est définie à EEXIST. Cet attribut est ignoré par
              fdopen().

       En plus des caractères supplémentaires, fopen() et freopen()
       acceptent la syntaxe suivante dans mode :

        ,ccs=chaîne

       La chaîne donnée est considérée comme le nom d'un jeu de
       caractères codés et le flux est marqué orienté caractères larges.
       Ensuite, les fonctions internes de conversion convertissent les E/S
       depuis et vers le jeu de caractères chaîne. Si la syntaxe
       ,ccs=chaîne n'est pas indiquée, alors l'orientation caractères
       larges du flux est déterminée par le premier fichier de l'opération.
       S'il s'agit une opération de caractères larges, le flux est marqué
       orienté caractères larges et les fonctions pour convertir vers le jeu
       de caractères codés sont chargées.

BOGUES
       Lors de l'analyse des caractères d'attribut individuels dans mode
       (c'est-à -dire les caractères précédant l'indication « ccs »),
       l'implémentation glibc de fopen() et freopen() limite le nombre de
       caractères examinés dans mode à 7 (ou, dans les versions de la glibc
       antérieures à 2.14, à 6, ce qui n'était pas suffisant pour inclure
       d'éventuelles spécifications comme « rb+cmxe »). L'implémentation
       actuelle de fdopen() analyse au plus 5 caractères de mode.

VOIR AUSSI
       open(2), fclose(3), fileno(3), fmemopen(3), fopencookie(3)

COLOPHON
       Cette page fait partie de la publication 3.65 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler des
       anomalies peuvent être trouvées à l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION
       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
       <http://po4a.alioth.debian.org/> par l'équipe de traduction
       francophone au sein du projet perkamon
       <http://perkamon.alioth.debian.org/>.

       Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain
       Portal <http://manpagesfr.free.fr/> (2003-2006).  Florentin Duneau et
       l'équipe francophone de traduction de Debian (2006-2009).

       Veuillez signaler toute erreur de traduction en écrivant Ã
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « man -L C <section> <page_de_man> ».



GNU                              22 avril 2012                        FOPEN(3)