fdopen

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)