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_errlist
e _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_value
size
* ] (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