Provided by: manpages-fr-dev_2.80.1-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  pour les macros de test de fonctionnalité de la glibc (consultez
   feature_test_macros(7)) :

       fdopen() : _POSIX_C_SOURCE || _XOPEN_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).

       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

       S’il réussissent intégralement fopen(), fdopen() et freopen() renvoient
       un pointeur sur un fichier, de type FILE. Sinon, ils 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èmes 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)

COLOPHON

       Cette  page  fait  partie  de  la  publication 2.80 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> ».