fopen(3) Library Functions Manual fopen(3) NOM fopen, fdopen, freopen - Fonctions d'ouverture de flux BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include FILE *fopen(const char *restrict path, const char *restrict mode); FILE *fdopen(int fd, const char *mode); FILE *freopen(const char *restrict path, const char *restrict mode, FILE *restrict stream); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : fdopen(): _POSIX_C_SOURCE DESCRIPTION The fopen() function opens the file whose name is the string pointed to by path and associates a stream with it. L'argument mode pointe vers une chaine commencant par l'une des sequences suivantes (eventuellement suivie de caracteres supplementaires, conformement a la description ci-dessous) : r Ouvrir le fichier en lecture. Le pointeur de flux est place au debut du fichier. r+ Ouvrir le fichier en lecture et ecriture. Le pointeur de flux est place au debut du fichier. w Tronquer le fichier a zero octet ou creer le fichier en ecriture. Le pointeur de flux est place au debut du fichier. w+ Ouvrir le fichier en lecture et ecriture. Le fichier est cree s'il n'existe pas. S'il existe deja, sa taille est ramenee a 0. Le pointeur de flux est place au debut du fichier. a Ouvrir le fichier en ajout (ecriture a la fin du fichier). Le fichier est cree s'il n'existe pas. Le pointeur de flux est place a la fin du fichier. a+ Ouvrir le fichier en lecture et ajout (ecriture en fin de fichier). Le fichier est cree s'il n'existe pas. Les donnees sont toujours ajoutees en fin de fichier. POSIX ne dit rien quant a la position initiale de lecture lorsqu'on utilise ce mode. Pour la glibc, la position initiale de lecture est le debut du fichier, mais pour Android, BSD et MacOS, elle est 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 deux caracteres vues ci-dessus. Ce mode sert uniquement a assurer la compatibilite avec ISO C 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 des details sur les 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), en fonction de la valeur d'umask du processus. Consultez umask(2). Reads and writes may be intermixed on read/write streams in any order. Note that ANSI C requires that a file positioning function intervene between output and input, unless an input operation encounters end-of-file. (If this condition is not met, then a read is allowed to return the result of writes other than the most recent.) Therefore it is good practice (and indeed sometimes necessary under Linux) to put an fseek(3) or fsetpos(3) operation between write and read operations on such a stream. This operation may be an apparent no-op (as in fseek(..., 0L, SEEK_CUR) called for its synchronizing side effect). Ouvrir un fichier en mode ajout (a comme premier caractere dans mode) fera que toutes les operations d'ecriture vers ce flux s'effectueront a la fin du fichier, comme si elles etaient precedees par l'appel : fseek(stream, 0, SEEK_END); Le descripteur de fichier associe a ce flux est ouvert dans le meme mode que s'il avait ete ouvert par un appel a 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 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 de fichier n'est pas duplique et sera ferme lorsque le flux cree par fdopen() sera ferme. Le resultat d'un appel a fdopen() sur un objet en memoire partagee est indefini. freopen() The freopen() function opens the file whose name is the string pointed to by path and associates the stream pointed to by stream with it. The original stream (if it exists) is closed. The mode argument is used just as in the fopen() function. If path is a null pointer, freopen() changes the mode of the stream to that specified in mode; that is, freopen() reopens the pathname that is associated with the stream. The specification for this behavior was added in the C99 standard, which says: Dans ce cas, le descripteur de fichier associe au flux n'a pas besoin d'etre ferme si l'appel a freopen() reussit. La liste des changements eventuels de mode autorises ainsi que les circonstances de ces changements dependent de l'implementation. freopen() est principalement utilise pour changer le fichier associe a un flux de texte standard (stderr, stdin ou stdout). VALEUR RENVOYEE En cas de succes, fopen(), fdopen() et freopen() renvoient un pointeur de type FILE. Sinon, elles renvoient NULL et errno est defini pour indiquer l'erreur. ERREURS EINVAL Le mode fourni a fopen(), fdopen() ou freopen() n'etait pas valable. Les fonctions fopen(), fdopen() et freopen() peuvent egalement echouer et definir dans errno une des erreurs specifiees pour malloc(3). La fonction fopen() peut aussi echouer et definir dans errno une des erreurs specifiees pour open(2). La fonction fdopen() peut aussi echouer et definir dans errno une des erreurs specifiees pour fcntl(2). La fonction freopen() peut aussi echouer et definir dans errno une des erreurs specifiees pour open(2), fclose(3) et fflush(3). ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +---------------------------------+--------------------------+---------+ |Interface | Attribut | Valeur | +---------------------------------+--------------------------+---------+ |fopen(), fdopen(), freopen() | Securite 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 bibliotheque GNU C permet les extensions suivantes pour la chaine specifiee par mode : c (depuis la glibc 2.3.3) Ne pas faire de l'operation d'ouverture ou des operations de lecture et ecriture ulterieures, des points d'annulation de thread. Cet attribut est ignore 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 ignore pour fdopen(). 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, mmap(2) n'est utilise 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 deja, fopen() echoue et errno est definie a EEXIST. Cet attribut est ignore par fdopen(). En plus des caracteres ci-dessus, fopen() et freopen() acceptent la syntaxe suivante dans mode : ,ccs=chaine La chaine specifiee est consideree comme le nom d'un jeu de caracteres codes et le flux est marque comme oriente caracteres larges. Ensuite, les fonctions internes de conversion convertissent les E/S depuis et vers ce jeu de caracteres. Si la syntaxe ,ccs=chaine n'est pas indiquee, alors l'orientation des caracteres larges du flux est determinee par la premiere operation sur le fichier. S'il s'agit une operation de caracteres larges, le flux est marque comme oriente caracteres larges et les fonctions pour convertir vers le jeu de caracteres codes sont chargees. BOGUES Lors de l'analyse des caracteres d'attribut individuel dans mode (c'est-a-dire les caracteres precedant l'indication << ccs >>), l'implementation de la glibc de fopen() et freopen() limite le nombre de caracteres examines dans mode a 7 (ou, avant la glibc 2.14, a 6, ce qui n'etait pas suffisant pour inclure d'eventuelles specifications comme << rb+cmxe >>). L'implementation actuelle de fdopen() analyse au plus 5 caracteres de mode. VOIR AUSSI open(2), fclose(3), fileno(3), fmemopen(3), fopencookie(3), open_memstream(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Frederic Hantrais et Lucien Gentis Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.15 17 mai 2025 fopen(3)