Scroll to navigation

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) :

Ouvrir le fichier en lecture. Le pointeur de flux est placé au début du fichier.
Ouvrir le fichier en lecture et écriture. Le pointeur de flux est placé au début du fichier.
Tronquer le fichier à zéro octet ou créer le fichier en écriture. Le pointeur de flux est placé au début du fichier.
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.
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.
Ouvrir le fichier en lecture et ajout (écriture en fin de fichier). 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 fichier, mais pour Android, BSD et MacOS, elle est à la fin du fichier.

The mode string can also include the letter 'b' either as a last character or as a character between the characters in any of the two-character strings described above. This is strictly for compatibility with ISO C and has no effect; the 'b' is ignored on all POSIX conforming systems, including Linux. (Other systems may treat text files and binary files differently, and adding the 'b' may be a good idea if you do I/O to a binary file and expect that your program may be ported to non-UNIX environments.)

Consultez la section NOTES ci-dessous pour des détails sur les 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), 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).

Opening a file in append mode (a as the first character of mode) causes all subsequent write operations to this stream to occur at end-of-file, as if preceded by the call:


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 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 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 comportement 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 circonstances 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 indiquer l'erreur.

ERREURS

Le mode fourni à fopen(), fdopen() ou freopen() n'était pas valable.

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

Interface Attribut Valeur
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

glibc notes

La bibliothèque GNU C permet les extensions suivantes pour la chaîne spécifiée par mode :

Do not make the open operation, or subsequent read and write operations, thread cancelation points. This flag is ignored for fdopen().
Ouvrir le fichier avec l'attribut O_CLOEXEC. Consultez open(2) pour de plus amples renseignements. Cet attribut est ignoré pour fdopen().
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.
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 indiqué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

When parsing for individual flag characters in mode (i.e., the characters preceding the "ccs" specification), the glibc implementation of fopen() and freopen() limits the number of characters examined in mode to 7 (or, before glibc 2.14, to 6, which was not enough to include possible specifications such as "rb+cmxe"). The current implementation of fdopen() parses at most 5 characters in mode.

VOIR AUSSI

open(2), fclose(3), fileno(3), fmemopen(3), fopencookie(3), open_memstream(3)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.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.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Frédéric Hantrais <fhantrais@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 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.

5 février 2023 Pages du manuel de Linux 6.03