Provided by:
manpages-fr_1.67.0-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);
DESCRIPTION
La fonction fopen ouvre le fichier dont le nom est contenu dans la
chaine 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 Ouvre le fichier en é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.
w+ Ouvre le fichier en lecture et écriture. Le fichier est créé
s’il n’existait pas. S’il existait deja, 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. Le pointeur
de flux est placé à la fin du fichier.
La chaîne mode peut également inclure la lettre ‘‘b’’ comme 3ème
caractere, 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 ANSI X3.159-1989 (‘‘ANSI C’’) 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 de texte et les
fichiers binaires différement, 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. Voir umask(2).
Les lectures et les écritures peuvent être mélangées sur les flux en
lecture et écriture, dans un ordre quelconque, et sans besoin de
positionnement entre les entrées et les sorties, à moins qu’une lecture
atteigne la fin du fichier. (Sinon sur certains systèmes la lecture
peut renvoyer les données provenant d’une écriture autre que la
dernière). Une bonne habitude 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 en 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 ("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é par dup(2), et sera refermé lorsque le flux créé par
fdopen sera refermé. 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é avec les flux standards 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
positionner dans errno une des erreurs susceptibles de se produire avec
malloc(3).
La fonction fopen peut aussi échouer et positionner dans errno une des
erreurs susceptibles de se produire avec open(2).
La fonction fdopen peut aussi échouer et positionner dans errno une des
erreurs susceptibles de se produire avec fcntl(2).
La fonction freopen peut aussi échouer et positionner dans errno une
des erreurs susceptibles de se produire avec open(2), fclose(3) et
fflush(3).
CONFORMITÉ
Les fonctions fopen et freopen sont conformes à ANSI X3.159-1989
(‘‘ANSI C’’). La fonction fdopen est conforme à IEEE Std1003.1-1988
(‘‘POSIX.1’’).
VOIR AUSSI
open(2), fclose(3), fileno(3).
TRADUCTION
Christophe Blaess, 1996-2003.