_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_errlistet _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 :

mode Modificateur 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 options t, c et nmode sont des extensions Microsoft 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, modele mode de traduction par défaut est défini par la variable _fmodeglobale. 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 _fdopenfopen 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 None
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 routine de texte générique

<tchar.h> Routine _UNICODE et _MBCS non défini _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