Provided by: manpages-fr-dev_4.19.0-7_all bug

NOM

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

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <stdio.h>

       FILE *fopen(const char *restrict chemin, const char *restrict mode);
       FILE *fdopen(int fd, const char *mode);
       FILE *freopen(const char *restrict chemin, const char *restrict mode,
                     FILE *restrict flux);

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

       fdopen():
           _POSIX_C_SOURCE

DESCRIPTION

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

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

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

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

       w      Tronquer le fichier à zéro octet ou créer le fichier en écriture.  Le  pointeur  de
              flux est placé au début du fichier.

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

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

       a+     Ouvrir le fichier en lecture et ajout (écriture en fin de fichier). Le fichier  est
              créé s'il n'existe pas. Les données sont toujours ajoutées en fin de fichier. POSIX
              ne dit rien quant à la position initiale de lecture lorsqu'on utilise ce mode. Pour
              la  glibc,  la  position  initiale  de  lecture  est le début du fichier, mais pour
              Android, BSD et MacOS, elle est à 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 à deux caractères vues ci-dessus. Ce mode
       sert uniquement à assurer la compatibilité avec ISO C 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 des détails sur les 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), en fonction de 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 requiert qu'une fonction de positionnement
       dans le fichier soit appelée entre une lecture et une écriture, à moins que l'opération de
       lecture  n'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
       fsetpos(3) entre les lectures et les écritures sur un flux de  ce  type.  Cette  opération
       peut  être une opération sans effet comme fseek(..., 0L, SEEK_CUR) et dont l'effet de bord
       est une synchronisation.

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

           fseek(stream, 0, SEEK_END);

       Le descripteur de fichier associé à ce flux est ouvert dans le même mode  que  s'il  avait
       été ouvert par un appel à open(2) avec les drapeaux suivants :

              ┌────────────────┬───────────────────────────────┐
              │Mode de fopen()Drapeaux d’open()             │
              ├────────────────┼───────────────────────────────┤
              │       r        │ O_RDONLY                      │
              ├────────────────┼───────────────────────────────┤
              │       w        │ O_WRONLY | O_CREAT | O_TRUNC  │
              ├────────────────┼───────────────────────────────┤
              │       a        │ O_WRONLY | O_CREAT | O_APPEND │
              ├────────────────┼───────────────────────────────┤
              │      r+        │ O_RDWR                        │
              ├────────────────┼───────────────────────────────┤
              │      w+        │ O_RDWR | O_CREAT | O_TRUNC    │
              ├────────────────┼───────────────────────────────┤
              │      a+        │ O_RDWR | O_CREAT | O_APPEND   │
              └────────────────┴───────────────────────────────┘
   fdopen()
       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 de fichier
       n'est pas dupliqué et sera fermé lorsque le flux créé par fdopen() sera fermé. Le résultat
       d'un appel à fdopen() sur un objet en mémoire partagée est indéfini.

   freopen()
       La  fonction freopen() ouvre le fichier dont le nom se trouve dans la chaîne de caractères
       pointée par chemin et lui associe le flux pointé par flux. Le flux original, s'il  existe,
       est fermé. L'argument mode est utilisé exactement comme dans la fonction fopen().

       Si  l'argument  chemin  contient  un  pointeur NULL, freopen() change le mode du flux pour
       celui spécifié dans mode ; cela  fait,  freopen()  réouvre  le  fichier  associé  au  flux
       considéré.  La  spécification  de  ce  comportement  a  été  ajoutée dans la norme C99 qui
       stipule :

              Dans ce cas, le descripteur de fichier associé au flux n'a pas besoin d'être  fermé
              si  l'appel  à  freopen()  réussit.  La  liste  des  changements  éventuels de mode
              autorisés  ainsi  que  les  circonstances   de   ces   changements   dépendent   de
              l'implémentation.

       freopen()  est  principalement  utilisé pour changer le fichier associé à un flux de texte
       standard (stderr, stdin ou stdout).

VALEUR RENVOYÉE

       En cas de succès, fopen(), fdopen() et freopen()  renvoient  un  pointeur  de  type  FILE.
       Sinon, elles renvoient NULL et errno est défini pour indiquer l'erreur.

ERREURS

       EINVAL Le mode fourni à fopen(), fdopen() ou freopen() n'était pas valable.

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

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

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

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

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌────────────────────────────────────────────────────────┬──────────────────────┬─────────┐
       │InterfaceAttributValeur  │
       ├────────────────────────────────────────────────────────┼──────────────────────┼─────────┤
       │fopen(), fdopen(), freopen()                            │ Sécurité des threads │ MT-Safe │
       └────────────────────────────────────────────────────────┴──────────────────────┴─────────┘

STANDARDS

       fopen(), freopen() : POSIX.1-2001, POSIX.1-2008, C99.

       fdopen() : POSIX.1-2001, POSIX.1-2008.

NOTES

   Notes de 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 lecture et écriture
              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, mmap(2) n'est utilisé que pour
              un fichier ouvert en lecture.

       x      Uniquement ouvrir le fichier (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 ci-dessus, fopen() et freopen() acceptent la syntaxe suivante  dans
       mode :

        ,ccs=chaîne

       La  chaîne  spécifiée  est considérée comme le nom d'un jeu de caractères codés et le flux
       est marqué comme orienté caractères larges. Ensuite, les fonctions internes de  conversion
       convertissent  les  E/S  depuis  et  vers ce jeu de caractères. Si la syntaxe  ,ccs=chaîne
       n'est pas indiquée, alors l'orientation des caractères larges du flux est  déterminée  par
       la  première  opération sur le fichier. S'il s'agit une opération de caractères larges, le
       flux est marqué comme 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  individuel  dans  mode (c'est-à-dire les
       caractères précédant l'indication « ccs »), l'implémentation de la  glibc  de  fopen()  et
       freopen()  limite le nombre de caractères examinés dans mode à 7 (ou, avant la glibc 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), open_memstream(3)

TRADUCTION

       La  traduction  française  de  cette  page  de  manuel  a  été créée par Christophe Blaess
       <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <stephan.rafin@laposte.net>,  Thierry
       Vignaud  <tvignaud@mandriva.com>,  François Micaux, Alain Portal <aportal@univ-montp2.fr>,
       Jean-Philippe   Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)    <jean-
       luc.coulon@wanadoo.fr>,    Julien    Cristau    <jcristau@debian.org>,    Thomas   Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau  <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis
       Barbier  <barbier@debian.org>,  David  Prévot   <david@tilapin.org>,   Frédéric   Hantrais
       <fhantrais@gmail.com> et Lucien Gentis <lucien.gentis@waika9.com>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General
       Public  License  version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   concernant   les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.