Share via


fread

Legge i dati da un flusso.

Sintassi

size_t fread(
   void *buffer,
   size_t size,
   size_t count,
   FILE *stream
);

Parametri

buffer
Percorso di archiviazione per i dati.

size
Dimensione dell'elemento in byte.

count
Numero massimo di elementi da leggere.

stream
Puntatore alla struttura FILE .

Valore restituito

fread restituisce il numero di elementi completi letti dalla funzione, che può essere minore di count se si verifica un errore o se rileva la fine del file prima di raggiungere count. Usare la funzione feof o ferror per distinguere un errore di lettura da una condizione di fine del file. Se size o count è 0, fread restituisce 0 e il contenuto del buffer rimane invariato. Se stream o buffer è un puntatore Null, fread richiama il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, la funzione imposta errno suEINVAL e restituisce 0.

Per altre informazioni sui codici restituiti, vedere errno, _doserrno, _sys_errliste _sys_nerr.

Osservazioni:

La funzione fread legge fino a count elementi con dimensioni in byte pari a size dall'elemento stream di output e li archivia in buffer. Il puntatore di file associato ( stream se esistente) è avanzato dal numero di byte fread letti. Se il flusso specificato viene aperto in modalità testo, le nuove righe di stile Windows vengono convertite in nuove righe in stile Unix. Ovvero, le coppie CRLF (Carriage Return-Line Feed) vengono sostituite da caratteri LF (Single Line Feed). La sostituzione non ha effetto sul puntatore del file o sul valore restituito. La posizione del puntatore del file è indeterminata se si verifica un errore. Non è possibile determinare il valore di un elemento parzialmente letto.

Se usato in un flusso in modalità testo, se la quantità di dati richiesti (ovvero size * count) è maggiore o uguale alla dimensione interna FILE del buffer * (per impostazione predefinita la dimensione è di 4096 byte, configurabile tramite setvbuf), i dati del flusso vengono copiati direttamente nel buffer fornito dall'utente e la conversione di nuova riga viene eseguita in tale buffer. Poiché i dati convertiti possono essere più brevi rispetto ai dati del flusso copiati nel buffer, i dati precedenti buffer[return_valuesize * ] (dove return_value è il valore restituito da fread) possono contenere dati non convertiti dal file. Per questo motivo, è consigliabile terminare i dati dei caratteri null in buffer[return_value * size] se lo scopo del buffer è quello di fungere da stringa di tipo C. Per fopen informazioni dettagliate sugli effetti della modalità testo e della modalità binaria.

Questa funzione blocca gli altri thread. Se è necessaria una versione che non blocca il thread, usare _fread_nolock.

Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.

Requisiti

Funzione Intestazione obbligatoria
fread <stdio.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Esempio

// crt_fread.c
// This program opens a file named FREAD.OUT and
// writes 25 characters to the file. It then tries to open
// FREAD.OUT and read in 25 characters. If the attempt succeeds,
// the program displays the number of actual items read.

#include <stdio.h>

int main( void )
{
   FILE *stream;
   char list[30];
   int  i, numread, numwritten;

   // Open file in text mode:
   if( fopen_s( &stream, "fread.out", "w+t" ) == 0 )
   {
      for ( i = 0; i < 25; i++ )
         list[i] = (char)('z' - i);
      // Write 25 characters to stream
      numwritten = fwrite( list, sizeof( char ), 25, stream );
      printf( "Wrote %d items\n", numwritten );
      fclose( stream );

   }
   else
      printf( "Problem opening the file\n" );

   if( fopen_s( &stream, "fread.out", "r+t" ) == 0 )
   {
      // Attempt to read in 25 characters
      numread = fread( list, sizeof( char ), 25, stream );
      printf( "Number of items read = %d\n", numread );
      printf( "Contents of buffer = %.25s\n", list );
      fclose( stream );
   }
   else
      printf( "File could not be opened\n" );
}
Wrote 25 items
Number of items read = 25
Contents of buffer = zyxwvutsrqponmlkjihgfedcb

Vedi anche

I/O di flusso
I/O file in modalità testo e binario
fopen
fwrite
_read