bionic (3) fopen.3.gz

Provided by: manpages-fr-dev_3.65d1p1-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 de macros de test de fonctionnalités pour la glibc (consultez feature_test_macros(7)) :

       fdopen() : _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_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  (éventuellement
       suivie par des caractères supplémentaires, conformément à la description ci-dessous).

       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. 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 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 l'appel :

           fseek(stream, 0, SEEK_END);

       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 faire de l'opération d'ouverture, ou des opérations de lectures et  écritures  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,  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 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 supplémentaires, fopen() et freopen() acceptent la syntaxe suivante dans mode :

        ,ccs=chaîne

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

COLOPHON

       Cette page fait partie de la publication 3.65 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

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Christophe       Blaess       <http://www.blaess.fr/christophe/>      (1996-2003),      Alain      Portal
       <http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau  et  l'équipe  francophone  de  traduction  de
       Debian (2006-2009).

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