Condividi tramite


_fdopen, _wfdopen

Associa un flusso a un file che è stato precedentemente aperto 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

Ognuna di queste funzioni restituisce un puntatore al flusso aperto. Un valore di puntatore Null indica un errore. Quando si verifica un errore, viene richiamato il gestore del parametro non valido, come descritto su Convalida dei parametri. Se si consente all'esecuzione di continuare, errno viene impostato o a EBADF, che indica un descrittore del file non corretto, o a EINVAL, che indica che mode è un puntatore null.

Per ulteriori informazioni su questi e altri codici, vedere _doserrno, errno, _sys_errlist, e _sys_nerr.

Note

La funzione _fdopen associa un flusso I/O con il file identificato da fd e pertanto consente che un file aperto per I/O a basso livello sia memorizzato nel buffer e formattato. _wfdopen è una versione a caratteri estesi di _fdopen; l'argomento mode in _wfdopen è una stringa di caratteri estesi. Altrimenti _wfdopen e _fdopen si comportano in modo identico.

Mapping di routine di testo generico

Routine Tchar.h

_UNICODE e _MBCS non definiti

_MBCS definito

_UNICODE definito

_tfdopen

_fdopen

_fdopen

_wfdopen

La stringa di caratteri mode 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 mostrato nella tabella seguente.

  • "r"
    Viene aperto per la lettura. Se il file non esiste o non viene trovato, la chiamata a fopen avrà esito negativo.

  • "w"
    Apre un file vuoto per la scrittura. Se il file specificato esiste, il contenuto viene eliminato in modo permanente.

  • "a"
    Verrà aperto per la scrittura alla fine del file (append). Creare il file se è inesistente.

  • "r+"
    Viene aperto per la lettura e la scrittura. (Il file deve esistere.)

  • "w+"
    Apre un file vuoto per la lettura e la scrittura. Se il file specificato esiste, il contenuto viene eliminato in modo permanente.

  • "a+"
    Viene aperto per la lettura e l'aggiunta. Creare il file se è inesistente.

Quando un file viene aperto con il tipo di accesso "a" o "a+", tutte le operazioni di scrittura si verificano alla fine del file. Il puntatore del file può essere riposizionato utilizzando fseek o rewind, ma viene sempre spostato di nuovo alla fine del file prima dell'esecuzione di qualsiasi operazione di scrittura. Pertanto, i dati esistenti non possono essere sovrascritti. Quando il tipo di accesso "r+", "w+" o "a+" viene specificato, sono consentite sia la lettura che la scrittura (il file viene definito aperto per "l'aggiornamento"). Tuttavia, quando si passa da lettura e scrittura, deve esserci una operazione intermedia fflush, fsetpos, fseek, o rewind. È possibile specificare la posizione corrente per l'operazione fsetpos o fseek, se si desidera.

Oltre ai valori specificati sopra, è anche possibile includere i caratteri seguenti a mode per specificare la modalità di conversione per i caratteri di nuova riga.

  • t
    Aprire in modalità testo (convertita). In questa modalità, le combinazioni ritorno a capo-avanzamento di riga (CR-LF) vengono convertite in un avanzamento riga (LF) al momento dell'input e i caratteri di avanzamento riga vengono convertiti in combinazioni di ritorno a capo-avanzamento di riga (CR-LF) al momento dell'output. Inoltre, Ctrl+Z viene interpretato nell'input come carattere di fine file. Nei file aperti per la lettura/scrittura, fopen verifica la presenza della combinazione Ctrl+Z alla fine del file e la rimuove, se possibile. Questa operazione viene eseguita perché l'utilizzo delle funzioni fseek e ftell per spostarsi all'interno di un file che termina con Ctrl+Z può causare un comportamento non corretto di fseek in prossimità della fine del file.

  • b
    Aprire in modalità binaria (non convertite). Tutte le conversioni dalla modalità t vengono eliminate.

  • c
    Abilitare il flag commit per filename associato, in modo da scrivere il contenuto del buffer di file direttamente su disco se viene chiamato fflush o _flushall.

  • n
    Reimpostare il flag commit per filename associato su "no-commit". Questa è l'impostazione predefinita. Esegue anche l'override del flag globale di commit se il programma viene collegato con Commode.obj. L'impostazione predefinita del flag commit globale è "no-commit", a meno che il programma venga collegato in modo esplicito a Commode.obj.

Le opzioni mode t, c e n sono estensioni Microsoft per fopen e _fdopen. Non utilizzarli se si vuole mantenere la portabilità ANSI.

Se t o b non è specificato in mode, la modalità di traduzione predefinita è definita dalla variabile globale _fmode. Se t o b è il prefisso dell'argomento, la funzione ha esito negativo e restituisce NULL. Per una descrizione della modalità binaria e di testo, vedere I/O dei File in modalità di Testo o Binaria.

I caratteri validi per la stringa mode utilizzata in fopen e _fdopen corrispondono agli argomenti oflag utilizzati in _open e _sopen, come segue.

Caratteri nelle stringhe mode

Valore oflagequivalente a _open/_sopen

a

_O_WRONLY | _O_APPEND (in genere _O_WRONLY | _O_CREAT | _O_APPEND)

a+

_O_RDWR | _O_APPEND (in genere _O_RDWR | _O_APPEND | _O_CREAT )

r

_O_RDONLY

r+

_O_RDWR

w

_O_WRONLY (in genere _O_WRONLY | _O_CREAT | _O_TRUNC)

w+

_O_RDWR (in genere _O_RDWR | _O_CREAT | _O_TRUNC)

b

_O_BINARY

t

_O_TEXT

c

None

n

None

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

Vedere anche

Riferimenti

I/O di flusso

_dup, _dup2

fclose, _fcloseall

fopen, _wfopen

freopen, _wfreopen

_open, _wopen