_fdopen, _wfdopen_fdopen, _wfdopen

Associe un flux à un fichier ouvert précédemment pour une E/S de bas niveau.Associates a stream with a file that was previously opened for low-level I/O.

SyntaxeSyntax

FILE *_fdopen(
   int fd,
   const char *mode
);
FILE *_wfdopen(
   int fd,
   const wchar_t *mode
);

ParamètresParameters

fdfd
Descripteur du fichier ouvert.File descriptor of the open file.

modemode
Type d'accès fichier.Type of file access.

Valeur de retourReturn Value

Chacune de ces fonctions retourne un pointeur désignant le flux ouvert.Each of these functions returns a pointer to the open stream. Une valeur de pointeur null indique une erreur.A null pointer value indicates an error. Quand une erreur se produit, le gestionnaire de paramètres non valides est appelé, comme décrit dans Validation de paramètre.When an error occurs, the invalid parameter handler is invoked, as described in Parameter Validation. Si l’exécution est autorisée à se poursuivre, errno a la valeur EBADF, ce qui indique un descripteur de fichier incorrect ou EINVAL, qui indique que le mode était un pointeur null.If execution is allowed to continue, errno is set either to EBADF, which indicates a bad file descriptor, or EINVAL, which indicates that mode was a null pointer.

Pour plus d’informations sur ces codes d’erreur et autres, consultez _doserrno, errno, _sys_errlist et _sys_nerr.For more information about these and other error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

NotesRemarks

La fonction _fdopen associe un flux d’e/s au fichier identifié par FDet permet ainsi à un fichier ouvert pour les e/s de bas niveau d’être mis en mémoire tampon et mis en forme.The _fdopen function associates an I/O stream with the file that is identified by fd, and thus allows a file that is opened for low-level I/O to be buffered and formatted. _wfdopen est une version à caractères larges de _fdopen; l’argument mode de _wfdopen est une chaîne de caractères larges._wfdopen is a wide-character version of _fdopen; the mode argument to _wfdopen is a wide-character string. _wfdopen et _fdopen , sinon, se comportent de la même façon._wfdopen and _fdopen otherwise behave identically.

Les descripteurs de fichiers passés dans _fdopen sont détenus par le flux de fichier * retourné.File descriptors passed into _fdopen are owned by the returned FILE * stream. Si _fdopen réussit, n’appelez _pas Close sur le descripteur de fichier.If _fdopen is successful, do not call _close on the file descriptor. L’appel de fclose sur le * fichier retourné ferme également le descripteur de fichier.Calling fclose on the returned FILE * also closes the file descriptor.

Mappages de routines de texte génériqueGeneric-Text Routine Mappings

Routine Tchar.hTchar.h routine _Unicode et _MBCS non définis_UNICODE and _MBCS not defined _MBCS défini_MBCS defined _UNICODE défini_UNICODE defined
_tfdopen_tfdopen _fdopen_fdopen _fdopen_fdopen _wfdopen_wfdopen

La chaîne de caractères de mode spécifie le type d’accès au fichier demandé pour le fichier :The mode character string specifies the type of file access requested for the file:

modemode AccessAccess
"r""r" Ouvre pour l'accès en lecture.Opens for reading. Si le fichier n’existe pas ou est introuvable, l’appel fopen échoue.If the file does not exist or cannot be found, the fopen call fails.
"w""w" Ouvre un fichier vide pour l'accès en écriture.Opens an empty file for writing. Si le fichier spécifié existe, son contenu est détruit.If the given file exists, its contents are destroyed.
"a""a" Ouvre pour l’écriture à la fin du fichier (ajout).Opens for writing at the end of the file (appending). Crée le fichier s'il n'existe pas.Creates the file if it does not exist.
"r+""r+" Ouvre pour l'accès en lecture et en écriture.Opens for both reading and writing. Le fichier doit exister.The file must exist.
"w+""w+" Ouvre un fichier vide pour l'accès en lecture et en écriture.Opens an empty file for both reading and writing. Si le fichier existe, son contenu est détruit.If the file exists, its contents are destroyed.
"a+""a+" S'ouvre pour lecture et ajout.Opens for reading and appending. Crée le fichier s'il n'existe pas.Creates the file if it does not exist.

Lorsqu’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.When a file is opened with the "a" or "a+" access type, all write operations occur at the end of the file. Le pointeur de fichier peut être repositionné à l’aide de fseek ou rembobiner, mais il est toujours redéplacé à la fin du fichier avant toute opération d’écriture. Par conséquent, les données existantes ne peuvent pas être remplacées.The file pointer can be repositioned by using fseek or rewind, but it is always moved back to the end of the file before any write operation is carried out. Thus, existing data cannot be overwritten. Quand le type d’accès "r +" , "w +" ou "a +" est spécifié, la lecture et l’écriture sont autorisées (le fichier est dit ouvert pour "mettre à jour").When the "r+", "w+", or "a+" access type is specified, both reading and writing are allowed (the file is said to be open for "update"). Toutefois, lorsque vous basculez entre la lecture et l’écriture, il doit y avoir une opération fflush, fsetpos, fseekou rembobiner intermédiaire.However, when you switch between reading and writing, there must be an intervening fflush, fsetpos, fseek, or rewind operation. Si vous le souhaitez, vous pouvez spécifier la position actuelle pour l’opération fsetpos ou fseek .You can specify the current position for the fsetpos or fseek operation, if you want to.

Outre les valeurs ci-dessus, les caractères suivants peuvent également être inclus dans le mode pour spécifier le mode de traduction pour les caractères de saut de ligne :In addition to the above values, the following characters can also be included in mode to specify the translation mode for newline characters:

modificateur de modemode modifier ComportementBehavior
tt Ouvrir en mode texte (traduit).Open in text (translated) mode. 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.In this mode, carriage return-line feed (CR-LF) combinations are translated into one-line feeds (LF) on input, and LF characters are translated to CR-LF combinations on output. De même, Ctrl+Z est interprété comme un caractère de fin de fichier en entrée.Also, Ctrl+Z is interpreted as an end-of-file character on input.
bb Ouvrir en mode binaire (non traduit).Open in binary (untranslated) mode. Toutes les traductions du mode t sont supprimées.Any translations from t mode are suppressed.
cc Activez l’indicateur de validation pour le nom de fichier associé afin que le contenu de la mémoire tampon de fichier soit écrit directement sur le disque si fflush ou _flushall est appelé.Enable the commit flag for the associated filename so that the contents of the file buffer are written directly to disk if either fflush or _flushall is called.
nn Réinitialiser l’indicateur de validation pour le nom de fichier associé sur «no-commit».Reset the commit flag for the associated filename to "no-commit." Il s'agit de la valeur par défaut.This is the default. Substitue aussi l'indicateur de validation globale si vous liez votre programme avec Commode.obj. La valeur par défaut de l’indicateur de validation globale est « no-commit », sauf si vous liez explicitement votre programme avec Commode.obj.It also overrides the global commit flag if you link your program with Commode.obj. The global commit flag default is "no-commit" unless you explicitly link your program with Commode.obj.

Les options de mode t, cet n sont des extensions Microsoft pour fopen et _fdopen.The t, c, and n mode options are Microsoft extensions for fopen and _fdopen. Ne les utilisez pas si vous voulez préserver la portabilité ANSI.Do not use them if you want to preserve ANSI portability.

Si t ou b n’est pas spécifié en mode, le mode de traduction par défaut est défini par _la variable globale fmode.If t or b is not given in mode, the default translation mode is defined by the global variable _fmode. Si t ou b est préfixé à l’argument, la fonction échoue et retourne la valeur null.If t or b is prefixed to the argument, the function fails and returns NULL. Pour en savoir plus sur les modes texte et binaire, consultez E/S de fichier en mode texte et binaire.For a discussion of text and binary modes, see Text and Binary Mode File I/O.

Les caractères valides pour la chaîne de mode utilisée dans fopen et _fdopen correspondent aux arguments Oflag utilisés dans _Open et _sopen, comme indiqué dans le tableau suivant :Valid characters for the mode string used in fopen and _fdopen correspond to oflag arguments used in _open and _sopen, as shown in this table:

Caractères dans la chaîne de modeCharacters in mode string Valeur Oflag équivalente pour _open et _sopenEquivalent oflag value for _open and _sopen
aa _O_ | WRONLYoappend_(généralement o WRONLY o Create o _ | _ | _ _ ___ APPEND)_O_WRONLY | _O_APPEND (usually _O_WRONLY | _O_CREAT | _O_APPEND)
a+a+ _O_ | RDWRoappend_(généralement o RDWR o Append o Create _ | | _ _ __ __ )_O_RDWR | _O_APPEND (usually _O_RDWR | _O_APPEND | _O_CREAT )
rr _O_RDONLY_O_RDONLY
r+r+ _O_RDWR_O_RDWR
ww _O_WRONLY (généralement _oWRONLY_ oCreate_otrunc_) | __ |_O_WRONLY (usually _O_WRONLY | _O_CREAT | _O_TRUNC)
w+w+ _O_RDWR (généralement _oRDWR_ oCreate_otrunc_) | __ |_O_RDWR (usually _O_RDWR | _O_CREAT | _O_TRUNC)
bb _BINAIRE_O_O_BINARY
tt _O_TEXT_O_TEXT
cc AucunNone
nn AucunNone

Configuration requiseRequirements

FonctionFunction En-tête requisRequired header
_fdopen_fdopen <stdio.h><stdio.h>
_wfdopen_wfdopen <stdio.h> ou <wchar.h><stdio.h> or <wchar.h>

Pour plus d'informations sur la compatibilité, voir Compatibilité.For more compatibility information, see Compatibility.

ExempleExample

// 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.txtInput: crt_fdopen.txt

Line one
Line two

SortieOutput

Lines in file: 2

Voir aussiSee also

E/S de fluxStream I/O
_dup, _dup2_dup, _dup2
fclose, _fcloseallfclose, _fcloseall
fopen, _wfopenfopen, _wfopen
freopen, _wfreopenfreopen, _wfreopen
_ouvrir, _wopen_open, _wopen