_fdopen, _wfdopen
Consente di associare un flusso di un file che è stato aperto in precedenza per i/O di basso livello.
FILE *_fdopen(
int fd,
const char *mode
);
FILE *_wfdopen(
int fd,
const wchar_t *mode
);
Parametri
fd
Descrittore di file del file aperto.mode
Tipo di accesso ai file.
Valore restituito
Ciascuna di queste funzioni restituisce un puntatore al flusso aperto.Il valore di un puntatore null indica un errore.Quando si verifica un errore, viene richiamato il gestore di parametro non valido, come descritto in Convalida dei parametri.Se è consentita l'esecuzione di continuare, errno uno è impostata su EBADF, che indica un descrittore di file non valido o EINVAL, che indica che mode è un puntatore null.
Per ulteriori informazioni su questi e altri codici di errore, vedere doserrno, errno, sys_errlist e sys_nerr.
Note
Il _fdopen funzione associa il file è identificato da un flusso dei / O fde consente pertanto di un file aperto per il / O a basso livello essere memorizzate nel buffer e formattato._wfdopenè una versione a caratteri estesi di _fdopen; il mode argomento _wfdopen è una stringa di caratteri estesi._wfdopene _fdopen in caso contrario si comportano in modo identico.
Mappature di testo generico Routine
Routine TCHAR. h |
Unicode e MBCS non definiti |
MBCS definito |
Unicode definito |
---|---|---|---|
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
Il mode stringa di caratteri specifica il tipo di file e di accesso ai file.
La stringa di caratteri mode specifica il tipo di accesso richiesto per il file, come illustrato nella tabella riportata di seguito.
"r"
Viene aperta per la lettura.Se il file non esiste o non viene trovato, il fopen chiamata ha esito negativo."w"
Apre un file vuoto per la scrittura.Se il file specificato non esiste, il contenuto viene eliminato."a"
Verrà aperto in scrittura alla fine del file (aggiunta).Se non esiste, viene creato il file."r+"
Viene aperta per la lettura e scrittura.(Il file deve esistere)."w+"
Apre un file vuoto per la lettura e scrittura.Se il file specificato non esiste, il contenuto viene eliminato."a+"
Viene aperta per la lettura e le aggiunte.Se non esiste, viene creato il file.
Quando viene aperto un file con il "a" o "a+" accesso tipo, tutti a scrivere le operazioni di verificano alla fine del file.È possibile riposizionare il puntatore del file utilizzando fseek o rewind, ma è sempre riportato alla fine del file prima di qualsiasi scrivere l'operazione viene eseguita.In questo modo, i dati esistenti non possono essere sovrascritto.Quando il "r+", "w+", o "a+" viene specificato il tipo di accesso, lettura e scrittura sono consentiti (il file viene detto aperto "Update").Tuttavia, quando si passa tra lettura e scrittura, deve esistere un intervengono fflush, fsetpos, fseek, o rewind operazione.È possibile specificare la posizione corrente per il fsetpos o fseek operazione, se si desidera.
Oltre ai valori sopra indicati, i seguenti caratteri possono anche incluso mode per specificare la modalità di conversione per i caratteri di nuova riga.
t
Apri in formato testo (convertiti) modalità.In questa modalità, le combinazioni di ritorno a capo e avanzamento riga (CR-LF) vengono convertite in feed di una riga (LF) all'input e vengono convertite in caratteri LF combinazioni CR-LF nell'output.Inoltre, Ctrl + Z viene interpretato come un carattere di fine del file di input.Nel file aperti in lettura/scrittura, fopen verifica la presenza di una Ctrl + Z alla fine del file e lo rimuove, se possibile.Ciò avviene perché tramite il fseek e ftell potrebbero causare funzioni per spostarsi all'interno di un file che termina con una Ctrl + Z fseek di comportarsi in modo non corretto verso la fine del file.b
Apri in modalità (untranslated) binari.Tutte le traduzioni da t modalità vengono soppressi.c
Attiva il flag di commit per il filename in modo che il contenuto del buffer del file viene scritti direttamente su disco se uno dei due fflush o _flushall viene chiamato.n
Reimpostare il flag di commit per il filename a "no-commit". Questa è l'impostazione predefinita.Sovrascrive anche il flag di commit globale se si collega il programma con Commode.obj.Il commit globale contrassegno predefinito è "no-commit" a meno che non si collega in modo esplicito il programma con Commode.obj.
The t, c, and nmode options are Microsoft extensions for fopen and _fdopen.Non utilizzarli se si desidera mantenere la massima portabilità ANSI.
Se t o b non viene assegnato mode, la modalità di conversione predefinita è definita la variabile globale fmode.Se t o b viene utilizzato come prefisso per l'argomento, la funzione ha esito negativo e restituisce NULL.Per una descrizione delle modalità binaria e testo, vedere testo e/O di File binari modalità.
I caratteri validi per il mode stringa utilizzata in fopen e _fdopen corrisponde a oflag gli argomenti utilizzati nella Open e _sopen, come illustrato di seguito.
Caratteri mode stringa |
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 |
Nessuno |
n |
Nessuno |
Requisiti
Funzione |
Intestazione obbligatoria |
---|---|
_fdopen |
<stdio.h> |
_wfdopen |
<stdio.h> o <wchar.h> |
Per ulteriori informazioni sulla compatibilità, vedere Compatibilità.
Esempio
// 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 );
}
Input: crt_fdopen.txt
Line one
Line two
Output
Lines in file: 2
Equivalente .NET Framework
System::IO::FileStream::FileStream