Provided by: manpages-fr-dev_3.65d1p1-1_all 

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> ».
GNU 22 avril 2012 FOPEN(3)