Funzione fread per leggere da un file in C

La funzione fread del linguaggio C permette di leggere blocchi di dati contenuti all’interno di un file, precedentemente aperto con la funzione fopen. La sintassi della funzione fread è la seguente:



size_t fread(void *ptr, size_t dim, size_t num, FILE *fp);


dove ptr è un puntatore che indica la zona di memoria di dimensione minima pari a dim*num, in cui verranno memorizzati i dati letti dal file, dim indica la dimensione in bytes di ogni singolo elemento da leggere, num rappresenta il numero di elementi di dimensione dim da leggere, mentre fp è il puntatore al file, ottenuto dalla fopen, da cui si vuole leggere i dati.

La funzione fread restituisce una variabile di tipo size_t che rappresenta il numero di elementi letti. In particolare, questo numero dovrà essere uguale al valore inserito all’interno del parametro num, in caso contrario, si è verificato un errore oppure la funzione fread ha raggiunto la fine del file (EOF).

Nota: all’interno dei file è contenuto un puntatore, noto come file pointer, che contiene la posizione attuale all’interno del file.

Esempio di lettura da file con la funzione fread in C

Nel seguente esempio viene usata la funzione fread per leggere una stringa contenuta all’interno di un file precedentemente aperto con la funzione fopen. In particolare una volta aperto il file in modalità scrittura e lettura (w+ oppure r+), utilizziamo la funzione fprintf per scrivere nel file la stringa "Ciao mondo", contenuta all’interno del array str.

A questo punto, il puntatore che contiene la posizione all’interno del file (file pointer) si troverà alla fine, cioè nella posizione appena dopo l’ultimo carattere scritto. Di conseguenza se vogliamo leggere il contenuto dobbiamo spostare o resettare tale puntatore all'inizio del file. Per far ciò possiamo utilizzare due particolari funzioni, la funzione fseek che permette di specificare la posizione del puntatore oppure la funzione rewind che imposta la posizione del puntatore all’inizio del file.

Spostata la posizione del puntatore, possiamo eseguire la funzione fread per leggere la stringa contenuta nel file, specificando la dimensione ed il numero di elementi da leggere. Sapendo che la dimensione di un char nel linguaggio C corrisponde ad 1 byte, possiamo utilizzare la funzione strlen per determinare la lunghezza della stringa str, che allo stesso tempo corrisponderà al numero di byte da leggere. Di conseguenza possiamo leggere carattere per carattere ciascuno di dimensione 1 byte per la lunghezza della stringa, oppure leggere l’intera stringa come un singolo elemento, cioè uno dei seguenti:



fread(buffer, 1, strlen(str), fp); 
fread(buffer, strlen(str), 1, fp);


Al termine dell’operazione di lettura non manca che stampare a schermo il contenuto della variabile buffer.


#include <stdio.h>
#include <string.h>

int main(){
    char str[] = "Ciao mondo";
    char buffer[100];
    FILE* fp;
    
    fp = fopen("test.txt", "w+");
    
    if(fp == NULL){
        printf("Errore durante l'apertura del file!\n");
    } else {
        // Scriviamo sul file il contenuto di str
        fprintf(fp, "%s", str);
        // Resettiamo il file pointer all'inizio del file
        rewind(fp);
        // Leggiamo il contenuto del file	
        fread(buffer, 1, strlen(str), fp);  
        
        printf("Contenuto file: %s", buffer);
    }
    
    fclose(fp);

    return 0;
}


Contenuto file: Ciao mondo

Indice pagine linguaggio C: