_fdopen
, _wfdopen
Associe un flux à un fichier ouvert précédemment pour une E/S de bas niveau.
Syntaxe
FILE *_fdopen(
int fd,
const char *mode
);
FILE *_wfdopen(
int fd,
const wchar_t *mode
);
Paramètres
fd
Descripteur du fichier ouvert.
mode
Type d'accès fichier.
Valeur retournée
Chacune de ces fonctions retourne un pointeur désignant le flux ouvert. Une valeur de pointeur null indique une erreur. Lorsqu’une erreur se produit, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, errno
a soit la valeur EBADF
, ce qui indique un descripteur de fichier incorrect, soit la valeur EINVAL
, ce qui indique que mode
était un pointeur null.
Pour plus d’informations sur ces codes d’erreur et d’autres codes d’erreur, consultez errno
, _doserrno
, _sys_errlist
et _sys_nerr
.
Notes
La fonction _fdopen
associe un flux d'E/S au fichier identifié par fd
et permet donc la mise en mémoire tampon et la mise en forme d'un fichier ouvert pour une E/S de bas niveau. _wfdopen
est une version à caractères larges de _fdopen
; l'argument mode
de _wfdopen
est une chaîne à caractères larges. Sinon, _wfdopen
et _fdopen
se comportent de la même façon.
Les descripteurs de fichiers transmis _fdopen
appartiennent au flux retourné FILE *
. Si _fdopen
elle réussit, n’appelez _close
pas le descripteur de fichier. L’appel fclose
sur le retourné FILE *
ferme également le descripteur de fichier.
Par défaut, l’état global de cette fonction est limité à l’application. Pour le modifier, consultez l’état global dans le CRT.
La mode
chaîne de caractères spécifie le type d’accès au fichier demandé pour le fichier :
mode |
Access |
---|---|
"r" |
Ouvre pour l'accès en lecture. Si le fichier n’existe pas ou est introuvable, l’appel fopen échoue. |
"w" |
Ouvre un fichier vide pour l'accès en écriture. Si le fichier spécifié existe, son contenu est détruit. |
"a" |
Ouvre pour écrire à la fin du fichier (ajout). Crée le fichier s'il n'existe pas. |
"r+" |
Ouvre pour l'accès en lecture et en écriture. Le fichier doit exister. |
"w+" |
Ouvre un fichier vide pour l'accès en lecture et en écriture. Si le fichier existe, son contenu est détruit. |
"a+" |
S'ouvre pour lecture et ajout. Crée le fichier s'il n'existe pas. |
Quand un fichier est ouvert avec le type d'accès "a"
ou "a+"
, toutes les opérations d'écriture se produisent à la fin du fichier. Le pointeur de fichier peut être repositionné à l’aide fseek
ou rewind
, mais il est toujours déplacé vers la fin du fichier avant l’exécution d’une opération d’écriture. Par conséquent, les données existantes ne peuvent pas être remplacées. Lorsque le type d'accès "r+"
, "w+"
ou "a+"
est spécifié, la lecture et l'écriture sont autorisées (on dit que le fichier est ouvert pour « mise à jour »). Cependant, quand vous basculez entre lecture et écriture, une opération intermédiaire fflush
, fsetpos
, fseek
ou rewind
doit exister. Vous pouvez éventuellement spécifier la position actuelle pour l'opération fsetpos
ou fseek
.
Outre les valeurs ci-dessus, les caractères suivants peuvent également être inclus dans mode
le mode de traduction pour les caractères de nouvelle ligne :
Modificateur mode |
Comportement |
---|---|
t |
Ouvrir en mode texte (traduit). Dans ce mode, les combinaisons retour chariot-saut de ligne sont traduites en flux d'une ligne (saut de ligne) en entrée, et les caractères de saut de ligne sont traduits en combinaisons retour chariot/saut de ligne en sortie. De même, Ctrl+Z est interprété comme un caractère de fin de fichier en entrée. |
b |
Ouvrir en mode binaire (non traduit). Les traductions du mode t sont supprimées. |
c |
Activer l'indicateur de validation pour le filename associé, afin que le contenu de la mémoire tampon de fichier soit écrit directement sur disque si fflush ou _flushall est appelé. |
n |
Réinitialisez l’indicateur de validation associé filename à « no-commit ». Cet indicateur est la valeur par défaut. Il remplace également l’indicateur de validation global si vous liez votre programme avec Commode.obj . L’indicateur de validation global par défaut est « sans validation », sauf si vous liez explicitement votre programme avec Commode.obj . |
Les t
options et n
mode
les extensions c
Microsoft sont pour fopen
et _fdopen
. Ne les utilisez pas si vous souhaitez conserver la portabilité ANSI.
Si t
la b
variable globale est définie ou non, mode
le mode de traduction par défaut est défini par la variable _fmode
globale. Si t
ou b
a l'argument comme préfixe, la fonction échoue et retourne NULL
. Pour une discussion sur les modes texte et binaire, consultez E/S de fichier texte et binaire.
Caractères valides pour la mode
chaîne utilisée et _fdopen
fopen
correspondent aux oflag
arguments utilisés dans _open
et_sopen
, comme indiqué dans ce tableau :
Caractères dans la chaîne mode |
Valeur équivalente oflag pour _open et _sopen |
---|---|
a |
_O_WRONLY | _O_APPEND (généralement _O_WRONLY | _O_CREAT | _O_APPEND ) |
a+ |
_O_RDWR | _O_APPEND (généralement _O_RDWR | _O_APPEND | _O_CREAT ) |
r |
_O_RDONLY |
r+ |
_O_RDWR |
w |
_O_WRONLY (généralement _O_WRONLY | _O_CREAT | _O_TRUNC ) |
w+ |
_O_RDWR (généralement _O_RDWR | _O_CREAT | _O_TRUNC ) |
b |
_O_BINARY |
t |
_O_TEXT |
c |
Aucun(e) |
n |
None |
Spécifications
Fonction | En-tête requis | En-tête C++ |
---|---|---|
_fdopen |
<stdio.h> |
<cstdio> |
_wfdopen |
<stdio.h> ou <wchar.h> |
<cstdio> |
Pour plus d’informations sur la conformité aux normes et les conventions d’affectation de noms dans la bibliothèque runtime C, consultez Compatibilité.
Mappages de routines de texte générique
Routine <tchar.h> |
_UNICODE et _MBCS non définis |
_MBCS défini |
_UNICODE défini |
---|---|---|---|
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
Exemple
// crt_fdopen.c
// This program opens a file by using low-level
// I/O, then uses _fdopen to switch to stream
// access. It counts the lines in the file.
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <share.h>
int main( void )
{
FILE *stream;
int fd, count = 0;
char inbuf[128];
// Open a file.
if( _sopen_s( &fd, "crt_fdopen.txt", _O_RDONLY, _SH_DENYNO, 0 ) )
exit( 1 );
// Get stream from file descriptor.
if( (stream = _fdopen( fd, "r" )) == NULL )
exit( 1 );
while( fgets( inbuf, 128, stream ) != NULL )
count++;
// After _fdopen, close by using fclose, not _close.
fclose( stream );
printf( "Lines in file: %d\n", count );
}
Entrée : crt_fdopen.txt
Line one
Line two
Sortie
Lines in file: 2
Voir aussi
E/S de flux
_dup
, _dup2
fclose
, _fcloseall
fopen
, _wfopen
freopen
, _wfreopen
_open
, _wopen