Man page - fdopen(3)

Packages contains this manual

Available languages:

en fr pl ja ru zh_TW zh_CN de

Manual

fopen

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
fdopen()
freopen()
VALEUR RENVOYÉE
ERREURS
ATTRIBUTS
STANDARDS
HISTORIQUE
NOTES
Notes de la glibc
BOGUES
VOIR AUSSI
TRADUCTION

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

r

Ouvrir le fichier en lecture. Le pointeur de flux est placé au début du fichier.

r+

Ouvrir le fichier en lecture et écriture. Le pointeur de flux est placé au début du fichier.

w

Tronquer le fichier à zéro octet ou créer le fichier en écriture. Le pointeur de flux est placé au début du fichier.

w+

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.

a

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.

a+

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.

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 Ă  deux caractĂšres vues ci-dessus. Ce mode sert uniquement Ă  assurer la compatibilitĂ© avec ISO 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 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 sur un fichier binaire et que votre programme risque d’ĂȘtre portĂ© sur un environnement non UNIX).

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

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 requiert qu’une fonction de positionnement dans le fichier soit appelĂ©e entre une lecture et une Ă©criture, Ă  moins que l’opĂ©ration de lecture n’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 fsetpos (3) entre les lectures et les Ă©critures sur un flux de ce type. Cette opĂ©ration peut ĂȘtre une opĂ©ration sans effet comme fseek(..., 0L, SEEK_CUR) et dont l’effet de bord est une synchronisation.

Ouvrir un fichier en mode ajout ( a comme premier caractĂšre dans mode ) fera que toutes les opĂ©rations d’écriture vers ce flux s’effectueront Ă  la fin du fichier, comme si elles Ă©taient prĂ©cĂ©dĂ©es par l’appel :

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 :

Image grohtml-3867947-1.png

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

EINVAL

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

Image grohtml-3867947-2.png

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 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 faire de l’opĂ©ration d’ouverture ou des opĂ©rations de lecture et Ă©criture ultĂ©rieures, des points d’annulation de thread. Cet attribut est ignorĂ© 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 ignorĂ© pour fdopen ().

m (depuis la glibc 2.3)

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.

x

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

Lors de l’analyse des caractĂšres d’attribut individuel dans mode (c’est-Ă -dire les caractĂšres prĂ©cĂ©dant l’indication « ccs »), l’implĂ©mentation de la glibc de fopen () et freopen () limite le nombre de caractĂšres examinĂ©s dans mode Ă  7 (ou, avant la glibc 2.14, Ă  6 , ce qui n’était pas suffisant pour inclure d’éventuelles spĂ©cifications comme « rb+cmxe »). L’implĂ©mentation actuelle de fdopen () analyse au plus 5 caractĂšres de 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 .