_fdopen, _wfdopen
Associe un flux de données à un fichier qui a été précédemment ouvert pour 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 au fichier.
Valeur de retour
Chacune de ces fonctions retourne un pointeur vers le flux ouvert.Une valeur de pointeur null indique une erreur.Lorsqu'une erreur se produit, le Gestionnaire de paramètre non valide est appelé, comme décrit dans Validation des paramètres.Si l'exécution est autorisée à poursuivre, errno a la valeur soit EBADF, qui indique un descripteur de fichier incorrect, ou EINVAL, qui indique que mode était un pointeur null.
Pour plus d'informations sur ces paramètres et autres codes d'erreur, consultez _doserrno, errno, _sys_errlist et _sys_nerr.
Notes
Le _fdopen fonction associe un flux d'e/S du fichier est identifié par fd, permettant ainsi un fichier est ouvert pour e/S de bas niveau être mis en mémoire tampon et mis en forme._wfdopenest une version à caractère élargi de _fdopen; le mode l'argument de _wfdopen est une chaîne de caractères larges._wfdopenet _fdopen se comportent comme dans le cas contraire.
Mappages de Routine de texte générique
Routine TCHAR.h |
_UNICODE et _MBCS non défini |
_MBCS défini |
_UNICODE est défini |
---|---|---|---|
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
Le mode chaîne de caractères spécifiant le type de fichier et d'accès au fichier.
La chaîne de caractères mode Spécifie le type d'accès demandé pour le fichier, comme illustré dans le tableau suivant.
"r"
S'ouvre en mode lecture.Si le fichier n'existe pas ou ne peut pas être trouvé, la fopen appel échoue."w"
Ouvre un fichier vide pour l'écriture.Si le fichier donné existe, son contenu est détruit."a"
S'ouvre en écriture, à la fin du fichier (joindre).Crée le fichier s'il n'existe pas."r+"
S'ouvre pour la lecture et en écriture.(Le fichier doit exister)."w+"
Ouvre un fichier vide pour la lecture et en écriture.Si le fichier donné existe, son contenu est détruit."a+"
S'ouvre pour lire et modifier.Crée le fichier s'il n'existe pas.
Lorsqu'un fichier est ouvert avec la "a" ou "a+" type, accéder à toutes les opérations s'effectuent à la fin du fichier d'écriture.Le pointeur de fichier peut être repositionné à l'aide de fseek ou rewind, mais il est toujours déplacé vers la fin du fichier avant de les écrire l'opération est effectuée.Par conséquent, les données existantes ne peut être remplacées.Lors de la "r+", "w+", ou "a+" type d'accès est spécifié, la lecture et en écriture sont autorisées (le fichier est réputé pour être ouvert pour « update »).Toutefois, lorsque vous basculez entre lecture et écriture, il doit y avoir un intervenant fflush, fsetpos, fseek, ou rewind opération.Vous pouvez spécifier la position actuelle de la fsetpos ou fseek opération, si vous le souhaitez.
En outre aux valeurs ci-dessus, les caractères suivants peuvent également être inclus dans mode pour spécifier le mode de traduction des caractères de saut de ligne.
t
Ouvrir au format texte (traduites) mode.Dans ce mode, chariot saut de retour de ligne (CR-LF) combinaisons sont traduites en flux d'une ligne (LF) en entrée et des caractères LF sont traduits en combinaisons CR-LF sur sortie.En outre, Ctrl + Z est interprété comme un caractère de fin de fichier en entrée.Dans les fichiers ouverts en lecture/écriture, fopen recherchera un Ctrl + Z à la fin du fichier et le supprime, si possible.Pour ce faire, car à l'aide de la fseek et ftell risquent de fonctions pour vous déplacer dans un fichier qui se termine par un Ctrl + Z fseek pour ne pas fonctionner correctement à la fin du fichier.b
Ouvrir dans le mode binaire (non traduit).Toute traduction à partir de t mode sont supprimées.c
Activer l'indicateur de validation pour les associés filename afin que le contenu de la mémoire tampon du fichier est écrites directement sur le disque si soit fflush ou _flushall est appelée.n
Réinitialiser l'indicateur de validation pour les associés filename à « sans engagement. » Il s'agit de la valeur par défaut.Il substitue également l'indicateur global de validation si vous liez votre programme avec Commode.obj.La valeur par défaut d'indicateur global de validation est « sans engagement », sauf si vous liez explicitement votre programme avec Commode.obj.
The t, c, and nmode options are Microsoft extensions for fopen and _fdopen.Ne les utilisez pas si vous souhaitez préserver la portabilité ANSI.
Si t ou b n'est indiqué mode, le mode de traduction par défaut est défini par la variable globale _fmode.Si t ou b est le préfixe pour l'argument, la fonction échoue et renvoie NULL.Pour une description des modes texte et binaires, consultez e/S de fichier en Mode binaire et de texte.
Les caractères valides pour le mode chaîne utilisée dans fopen et _fdopen correspondent aux oflag arguments utilisés dans les _open et _sopen, comme suit.
Caractères dans mode chaîne |
Equivalent oflagvalue for _open/_sopen |
---|---|
a |
_O_WRONLY | _O_APPEND(usually _O_WRONLY | _O_CREAT | _O_APPEND) |
a+ |
_O_RDWR | _O_APPEND (usually _O_RDWR | _O_APPEND | _O_CREAT ) |
r |
_O_RDONLY |
r+ |
_O_RDWR |
w |
_O_WRONLY(usually _O_WRONLY | _O_CREAT | _O_TRUNC) |
w+ |
_O_RDWR(usually _O_RDWR | _O_CREAT | _O_TRUNC) |
b |
_O_BINARY |
t |
_O_TEXT |
c |
Aucun |
n |
Aucun |
Configuration requise
Fonction |
En-tête requis |
---|---|
_fdopen |
<stdio.h> |
_wfdopen |
<stdio.h> ou <wchar.h> |
Pour plus d'informations de compatibilité, voir 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