Provided by: manpages-fr-dev_4.26.0-1_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()
              C11, POSIX.1-2008.

       fdopen()
              POSIX.1-2008.

HISTORIQUE

       fopen()
       freopen()
              POSIX.1-2001, C89.

       fdopen()
              POSIX.1-2001.

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

Pages du manuel de Linux 6.9.1                     2 mai 2024                                           fopen(3)