_fdopen, _wfdopen
Associe un flux de données à un fichier qui a été précédemment ouvert pour les E/S de bas niveau.
FILE *_fdopen(
int fd,
const char *mode
);
FILE *_wfdopen(
int fd,
const wchar_t *mode
);
Paramètres
fd
Descripteur de fichier du fichier ouvert.mode
Type d'accès aux fichiers.
Valeur de retour
Chacune de ces fonctions retourne un pointeur vers un flux ouvert. Une valeur de pointeur null indique une erreur. Si une erreur advient, le gestionnaire de paramètres invalides est appelé, comme décrit dans Validation de paramètre. Si l'exécution est toujours permise, errno sera retourné EBADF, qui indique un mauvais descripteur de fichier, ou EINVAL, qui indique que mode est un pointeur null.
Pour plus d'informations sur ces codes d'erreur et d'autres, consultez _doserrno, errno, _sys_errlist et _sys_nerr.
Notes
La fonction _fdopen associe un flux d'E/S au fichier identifié par fd, et permet ainsi à un fichier ouvert pour l'E/S de bas niveau à mettre d'être mis en forme en mis en mémoire tampon. _wfdopen est une version à caractères larges de _fdopen; l'argument mode vers _wfdopen est une chaîne à caractères larges. _wfdopen et _fdopen se comportent sinon de manière identique.
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 |
La chaîne de caractères mode spécifie le type de fichier et l'accès au fichier.
La chaîne de caractères mode spécifie le type d'accès demandé pour le fichier, comme indiqué dans le tableau suivant.
"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"
Ouvert à l'écriture, à la fin du fichier (ajouter). 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 spécifié existe, son contenu est détruit."a+"
S'ouvre pour lecture et ajout. Crée le fichier s'il n'existe pas.
Lorsqu'un fichier est ouvert avec le type d'accès "a" ou "a+", toutes les opérations d'écriture ont lieu à la fin du fichier. Le pointeur de fichier peut être repositionné à l'aide de fseek ou de rewind, 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 ê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 »). Toutefois, lorsque vous basculez entre la lecture et l'écriture, il doit y avoir une intervention de fflush, fsetpos, fseek, ou d'une opération rewind. Vous pouvez spécifier la position actuelle de l'opération pour fsetpos ou de fseek, si vous le souhaitez.
En plus des valeurs précédentes, les caractères suivants peuvent également être ajoutés à mode pour spécifier le mode de traduction des caractères de nouvelle ligne.
t
Ouvrir en mode texte (traduit). Dans ce mode, les combinaisons de saut de ligne-retour de chariot (CR-LF) sont traduites en sauts de ligne uniques (LF) en entrée et les caractères LF sont traduits en combinaisons CR-LF en sortie. En outre, Ctrl+Z est interprété comme caractère de fin de fichier sur l'entrée. Dans les fichiers ouverts en lecture/écriture à l'aide de fopen, vérifie la p+résence de Ctrl+Z à la fin du fichier et le supprime, si possible. Cette opération est effectuée car l'utilisation des fonctions fseek et de ftell pour se déplacer dans un fichier qui se termine par Ctrl+Z peut provoquer un comportement incorrect de fseek près de la fin du fichier.b
Ouvrez en mode binary. Les traductions depuis le 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éinitialiser l'indicateur de validation pour le filename associé à la valeur « no-commit » Il s'agit de la valeur par défaut. Substitue également l'indicateur de validation global 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.
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 ou b n'est pas donné dans mode, le mode de traduction par défaut est défini par la variable globale _fmode. Si t ou b a l'argument comme préfixe, la fonction échoue et retourne NULL. Pour une discussion des modes de texte et binaire, consultez E/S de fichier du mode de texte et binaire.
Les caractères valides pour la chaîne mode utilisée dans fopen et _fdopen correspondent aux arguments oflag utilisés dans _open et _sopen, comme suit.
Caractères en chaîne de caractères mode. |
Valeur oflag équivalente pour _open/_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 |
Configuration requise
Fonction |
En-tête requis |
---|---|
_fdopen |
<stdio.h> |
_wfdopen |
<stdio.h> ou <wchar.h> |
Pour plus d'informations sur la compatibilité, consultez Compatibilité.
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
Équivalent .NET Framework
System::IO::FileStream::FileStream