Loading

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 (voir
   feature_test_macros(7)) :

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

       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. Voyez 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. Voir 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.23  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

       Cette  page  de  manuel  a  été  traduite et mise à jour par Christophe
       Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis  par
       Alain  Portal  <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
       francophone de traduction de Debian.

       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> ».