Funzione fseek per spostare il file pointer di un file in C
La funzione fseek in C è una funzione in grado di spostare il puntatore di posizione del file, chiamato file pointer, in una qualsiasi posizione all’interno del file. In particolare la funzione fseek permette di definire un offset da utilizzare insieme a delle costanti che indicano particolari zone del file. Di seguito viene riportata la sintassi di fseek:
int fseek(FILE *fp, long int offset, int pos);
dove fp è il puntatore al file (restituito dalla funzione fopen) in cui vogliamo spostare la posizione del file pointer, offset indica il numero di quanti byte il file pointer verrà spostato dalla posizione pos, mentre pos è la posizione iniziale, definita da una di tre costanti, a cui verrà aggiunta l’offset. Le tre costanti utilizzabili per indicare la posizione iniziale pos, sono le seguenti:
SEEK_SET: indica l’inizio del file
SEEK_CUR: indica la posizione attuale del file pointer
SEEK_END: indica la fine del file
Quindi la combinazione dell’offset e delle costanti di posizioni, permettono di spostare il file pointer in qualsiasi posizione all’interno del file, indipendentemente dalla sua posizione attuale. Oltre ad un accesso sequenziale, la funzione fseek permette anche di accedere in maniera casuale all’interno di un file.
Nota: il valore dell’offset non deve essere per forza positivo, ma può assumere anche valori negativi.
La funzione fseek restituisce un valore di tipo intero, nello specifico 0 in caso di successo, mentre un qualsiasi altro valore diverso da 0 sta ad indicare un errore durante lo spostamento.
Esempio di utilizzo della funzione fseek in C
Di seguito viene riportato l’esempio visto nella pagina della funzione fread, in cui viene scritta una stringa su un file, precedentemente aperto, ma dato che l’operazione di scrittura sposta il file pointer, dobbiamo spostare quest’ultimo in modo da poter leggere il contenuto del file. Per poter spostare il file pointer facciamo uso della funzione fseek, che ci permette di spostare la posizione del puntatore non solo all’inizio, come con la funzione rewind, ma anche con un certo offset.
#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
fseek(fp, 0, SEEK_SET);
// Leggiamo il contenuto del file
fread(buffer, 1, strlen(str), fp);
printf("Contenuto file: %s", buffer);
}
fclose(fp);
return 0;
}
// Output: Contenuto file: Ciao mondo
In questo modo otteniamo lo stesso risultato ottenuto usando la funzione rewind, ma volendo possiamo definire un offset diverso da 0 per spostare il file pointer ed ottenere un risultato diverso. Ad esempio usando un offset da 6 byte partendo sempre da SEEK_SET otteniamo:
Contenuto file: ondo
Indice pagine di c
Indice cPagine aggiunte di recente
Indice pagine del linguaggio C: Funzioni, Stringhe, ArrayCome effettuare la radice quadrata con la funzione sqrt in CCome ottenere il valore assoluto con la funzione abs in CCome generare numeri casuali con la funzione rand in CCome generare numeri casuali tra due numeri in C