Date création : 27-03-2008 20:23:44
 Vous êtes dans : GNU/Linux Astuces / Pages man [Section3 - Sous-fonctions]
FOPEN
Index
- NOM
- SYNOPSIS
- DESCRIPTION
- VALEUR RENVOYÉE
- ERREURS
- CONFORMITÉ À
- EXTENSIONS DE LA GLIBC
- VOIR AUSSI
- TRADUCTION
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);
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.
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 lettres
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 binaires et que votre
programme risque d'être porté sur un environnement non Unix).
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. Voyez 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() ou fgetpos() 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.
EXTENSIONS 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.
La traduction de cette page de manuel est basée sur les traductions
disponibles sur http://manpagesfr.free.fr/,
mais est gérée par l'équipe francophone de traduction de Debian
au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction 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> ».
|