Provided by: manpages-fr-dev_3.32d0.2p4-1_all bug

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
       (d'autres caractères peuvent suivre la séquence) :

       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 un
       appel

           fseek(stream,0,SEEK_END);

       systématique.

       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  rendre  l'opération d'ouverture ou les opérations de lectures et écritures
              ultérieures, des points d'annulation de thread.

       e (depuis la glibc 2.7)
              Ouvrir  le  fichier  avec  l'attribut  O_CLOEXEC.  Consultez  open(2)   pour   plus
              d'informations.

       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 le drapeau O_EXCL de open(2)).
              Si le fichier existe déjà, fopen() échoue et errno est définie à EEXIST. Ce drapeau
              est ignoré par fdopen().

VOIR AUSSI

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

COLOPHON

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

TRADUCTION

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

       Christophe   Blaess   <URL:http://www.blaess.fr/christophe/>   (1996-2003),  Alain  Portal
       <URL: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> ».