Provided by:
manpages-fr-dev_3.27fr1.4-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 fonctionnalites 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
chaine pointee par path et lui associe un flux.
L'argument mode pointe vers une chaine commencant par l'une des
sequences suivantes (d'autres caracteres peuvent suivre la sequence) :
r Ouvre le fichier en lecture. Le pointeur de flux est place au
debut du fichier.
r+ Ouvre le fichier en lecture et ecriture. Le pointeur de flux est
place au debut du fichier.
w Tronque le fichier a son debut ou ouvre le fichier en ecriture.
Le pointeur de flux est place au debut du fichier.
w+ Ouvre le fichier en lecture et ecriture. Le fichier est cree
s'il n'existait pas. S'il existait deja, sa longueur est ramenee
a 0. Le pointeur de flux est place au debut du fichier.
a Ouvre le fichier en ajout (ecriture a la fin du fichier). Le
fichier est cree s'il n'existait pas. Le pointeur de flux est
place a la fin du fichier.
a+ Ouvre le fichier en lecture et ajout (ecriture en fin de
fichier). Le fichier est cree s'il n'existait pas. La position
initiale du fichier pour la lecture est en debut de fichier,
mais les ajouts sont toujours places a la fin du fichier.
La chaine mode peut egalement inclure la lettre << b >> comme dernier
caractere, ou meme entre les deux caracteres d'une des sequences a 2
caracteres vues ci-dessus. Ce mode sert uniquement a assurer la
compatibilite avec C89 et n'a aucun effet. Le << b >> est ignore sur
tous les systemes compatibles POSIX, y compris Linux (d'autres systemes
peuvent traiter les fichiers textes et les fichiers binaires
differemment, et l'ajout du << b >> peut etre une bonne idee si vous
faites des entrees/sorties sur un fichier binaire et que votre
programme risque d'etre porte sur un environnement non Unix).
Consultez la section NOTES ci-dessous pour le details des extensions de
la glibc pour mode.
Tout fichier cree aura le mode S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP |
S_IROTH | S_IWOTH (0666), qui sera ensuite modifie par la valeur
d'umask du processus. Consultez umask(2).
Les lectures et les ecritures peuvent etre melangees sur les flux en
lecture et ecriture, dans un ordre quelconque. Notez que AINSI C
necessite qu'une fonction de positionnement dans le fichier soit
appelee entre une lecture et une ecriture, a moins que l'operation de
lecture atteigne la fin du fichier(si cette condition n'est pas
rencontree, alors une lecture est permise pour renvoyer le resultat
d'une ecriture autre que la derniere). Une bonne habitude (souvent
necessaire sous Linux) consiste donc a intercaler un fseek(3) ou
fgetpos(3) entre les lectures et les ecritures sur le meme flux. Ces
operations peuvent etre 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 caractere dans le
mode) feront agir toutes les operations d'ecriture a la fin du flux,
comme si elles etaient precedees par un appel
fseek(stream,0,SEEK_END);
systematique.
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 etre compatible avec
celui du descripteur de fichier. L'indicateur de position du nouveau
flux prend la meme valeur que celui de fd, et les indicateurs d'erreur
et de fin de fichier sont effaces. Les modes << w >> et << w+ >> ne
tronquent pas le fichier. Le descripteur n'est pas duplique, et sera
ferme lorsque le flux cree par fdopen() sera ferme. L'appel de fdopen()
sur un objet en memoire partagee est indefini.
La fonction freopen() ouvre le fichier dont le nom se trouve dans la
chaine de caracteres pointee par path et lui associe le flux pointe par
stream. Le flux original, s'il existe, est ferme. L'argument mode est
utilise exactement comme avec fopen(). La principale utilisation de
freopen() est de modifier le fichier associe aux flux standard de texte
(stderr, stdin, ou stdout).
VALEUR RENVOY'EE
Si elles reussissent integralement, 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 a fopen(), fdopen(), ou freopen() etait invalide.
Les fonctions fopen(), fdopen() et freopen() peuvent egalement echouer
et definir dans errno une des erreurs specifiees par malloc(3).
La fonction fopen() peut aussi echouer et definir dans errno une des
erreurs specifiees par open(2).
La fonction fdopen() peut aussi echouer et definir dans errno une des
erreurs specifiees par fcntl(2).
La fonction freopen() peut aussi echouer et definir dans errno une des
erreurs specifiees par open(2), fclose(3) et fflush(3).
CONFORMIT'E
Les fonctions fopen() et freopen() sont conformes a C89. La fonction
fdopen() est conforme a POSIX.1-1990.
NOTES
Notes sur la glibc
La bibliotheque GNU C permet les extensions suivantes pour la chaine
specifiee par mode :
c (depuis la glibc 2.3.3)
Ne pas rendre l'operation d'ouverture ou les operations de
lectures et ecritures ulterieures, des points d'annulation de
thread.
e (depuis la glibc 2.7)
Ouvrir le fichier avec l'attribut O_CLOEXEC. Consultez open(2)
pour plus d'informations.
m (depuis la glibc 2.3)
Essayer d'acceder au fichier avec mmap(2), au lieu des appels
systeme d'entrees/sorties (read(2), write(2)). Actuellement,
l'utilisation de mmap(2) n'est seulement tentee que pour un
fichier ouvert en lecture.
x Ouvrir le fichier de maniere exclusive (comme avec le drapeau
O_EXCL de open(2)). Si le fichier existe deja, fopen() echoue et
errno est definie a EEXIST. Ce drapeau est ignore par fdopen().
VOIR AUSSI
open(2), fclose(3), fileno(3), fmemopen(3), fopencookie(3)
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Florentin
Duneau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.
GNU 23 fevrier 2009 FOPEN(3)