Provided by:
manpages-fr-dev_2.64.1-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 fildes, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE *stream);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
fdopen(): _POSIX_C_SOURCE || _XOPEN_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 (d’autres caractères peuvent suivre la séquence) :
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.
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 C89 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.)
Any created files will have mode
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH (0666), as modified by
the process’s umask value (see 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 un appel
fseek(stream,0,SEEK_END);
systématique.
La fonction fdopen() associe un flux avec un descripteur de fichier
fildes 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 fildes, 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
S’il réussissent intégralement fopen(), fdopen() et freopen() renvoient
un pointeur sur un fichier, de type FILE. Sinon, ils 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 à propos de 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 rendre l’opération d’ouverture ou les opérations de
lectures et écritures ultérieures, des points d’annulation de
thread.
m (depuis la glibc 2.3)
Essayer d’accéder au fichier avec mmap(2), au lieu des appels
systèmes 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 le drapeau
O_EXCL de open(2)). Si le fichier existe déjà, fopen() échoue et
errno est définie à EEXIST. Ce drapeau est ignoré par fdopen().
VOIR AUSSI
open(2), fclose(3), fileno(3)
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
francophone de traduction de Debian.
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> ».