dwww Home | Manual pages | Find package

fopen(3)                   Library Functions Manual                   fopen(3)

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 écri-
              ture. 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  fi-
              chier).  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  fi-
              chier, mais pour Android, BSD et MacOS, elle est à la fin du fi-
              chier.

       La chaîne mode peut également inclure la lettre « b » comme dernier ca-
       ractè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  compa-
       tibilité  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érem-
       ment, 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  exten-
       sions 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  proces-
       sus. 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  re-
       quiert  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 Li-
       nux) 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  va-
       leur  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 com-
       portement 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 circons-
              tances 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  in-
       diquer l'erreur.

ERREURS
       EINVAL Le  mode fourni à fopen(), fdopen() ou freopen() n'était pas va-
              lable.

       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  indi-
       qué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 ca-
       ractè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_mem-
       stream(3)

TRADUCTION
       La traduction française de cette page de manuel a été créée par  Chris-
       tophe  Blaess  <https://www.blaess.fr/christophe/>, Stéphan Rafin <ste-
       phan.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.cou-
       lon@wanadoo.fr>,  Julien  Cristau <jcristau@debian.org>, Thomas Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François  <nicolas.francois@centra-
       liens.net>,  Florentin  Duneau <fduneau@gmail.com>, Simon Paillard <si-
       mon.paillard@resel.enst-bretagne.fr>,   Denis   Barbier    <barbier@de-
       bian.org>,  David  Prévot <david@tilapin.org>, Frédéric Hantrais <fhan-
       trais@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⟩.

Pages du manuel de Linux 6.03   5 février 2023                        fopen(3)

Generated by dwww version 1.15 on Sat Jun 29 00:41:26 CEST 2024.