AD

Rewind in C, posizionare file pointer all'inizio del file

La funzione rewind del linguaggio C è una funzione in grado di posizionare il file pointer all’inizio del file specificato. Di seguito viene riportata la sintassi della funzione rewind in C:

void rewind(FILE *fp);

dove fp è il puntatore al file restituito dalla funzione fopen e serve per indicare alla funzione rewind il file a cui vogliamo modificare la posizione del file pointer. Da come si può notare dal tipo di dato void, la rewind non restituisce alcun valore.

La funzione rewind risulta essere molto utile quando si effettuano diverse operazioni sui file, permettendo di ripartire dall’inizio del file senza dover chiuderlo e riaprirlo ogni volta. Per esempio se effettuiamo un’operazione di scrittura il pointer punterà al termine del contenuto scritto, di conseguenza non è possibile leggere il contenuto appena aggiunto dato che il puntatore file pointer può solo andare avanti.

Nota: oltre alla funzione rewind esiste anche la funzione fseek che permette di specificare il luogo all’interno del file in cui spostare il file pointer.

Esempio di utilizzo della funzione rewind in C 

Nel seguente esempio viene usata la funzione fprintf per scrivere una stringa all’interno di un file precedentemente aperto con la funzione fopen. Successivamente verrà stampato a schermo la stringa aggiunta, leggendo il contenuto del file, ma dato che il file pointer a seguito dell'operazione di scrittura non si troverà nella posizione corretta, verrà usata la funzione rewind per resettare il file pointer all’inizio del file. Solo a questo punto può essere chiamata una funzione per leggere il contenuto del file, come per esempio la fgetc.

#include <stdio.h> int main(){     FILE *fp;     char c;     fp = fopen("file.txt", "w+");     if(fp == NULL){         printf("Errore durante l'apertura del file!\n");     } else {         // Scriviamo una stringa sul file fp         fprintf(fp, "Ciao mondo.");         // Resettiamo il file pointer all'inizio del file         rewind(fp);         // Leggiamo il contenuto del file fino a che non viene raggiunto EOF         while((c = fgetc(fp)) != EOF){             printf("%c", c);         }     }     fclose(fp);     return 0; } // Output: Ciao mondo.

Senza l’utilizzo della funzione rewind non sarebbe stato possibile leggere il contenuto del file aggiunto, se non chiudendo e riaprendo nuovamente il file oppure usando la funzione fseek.