Prima di iniziare a parlare dei file nel linguaggio C, facciamo un passo indietro per capire cosa essi siano effettivamente. Molto spesso vediamo un file come un’entità che contiene un certo tipo di dato. Una canzone, un’immagine, un filmato, un file di testo, la nostra tesi di laurea…tutte queste cose, in
apparenza così diverse tra loro, vengono trattate a livello informatico come una sola
entità, ovvero come file.
Ma effettivamente un file è un contenitore di informazioni/dati in formato digitale, tipicamente presenti su un supporto digitale di memorizzazione opportunamente formattato in un determinato file system.
Quindi ritornando alla programmazione in C, possiamo affermare che, arrivati a questo punto, la faccenda si fa interessante. Con i file è possibile memorizzare i nostri operati, pertanto si possono iniziare a comporre dei programmi di un notevole spessore.
In C le operazioni di input e output vengono semplificate mediante l’uso degli stream, ossia delle astrazioni rappresentative di un file o di un dispositivo fisico, che vengono manipolate mediante l’uso di puntatori. Il vantaggio di usare lo stream sta nel fatto di potersi riferire tranquillamente ad un identificatore senza preoccuparsi della sua implementazione. Sullo stream inoltre vengono applicate tre operazioni: lo si apre, vi si accede (lettura e scrittura), lo si chiude. Inoltre ricordiamo che lo stream è bufferizzato.
Gli stream predefiniti nel linguaggio C sono: stdin, stdout, stderr.
APERTURA DI UN FILE
I file sono la parte più importante degli stream perché, come detto in precedenza, sono un elemento essenziale per permettere al programmatore di creare applicazioni interattive
La prima cosa da fare quindi è aprire un file mediante la funzione fopen, che sarà strutturata nel seguente modo:
FILE *fopen(char *nome_file, char *modo);
che prende come parametri di input il nome del file al quale si intende accedere ed il modo in cui si vuole aprirlo, seguendo il seguente schemino:
r = (read) lettura -> Legge il contenuto di un file esistente
w = (write) scrittura -> Scrive un nuovo file o sovrascrive su un file esistente
a = (append) aggiunta dati -> Aggiunge dati alla fine del file
restituendo un puntatore all’oggetto FILE che servirà, dopo l’apertura, per poter accedere correttamente allo stream; se non si può accedere al file, viene restituito un puntatore con valore NULL.
FUNZIONI FPRINTF E FSCANF
Una volta aperto il file mediante la funzione fopen come visto nel paragrafo precedente, possiamo usare due funzioni per accedervi: fprintf e fscanf, molto simili a printf e scanf, operano sullo stream aperto da fopen(). Esse sono descritte nel seguente modo:
int fprintf(FILE *stream, char *formato, argomenti …);
int fscanf(FILE *stream, char *formato, argomenti …);
La fprintf come si intuisce scrive su file, la fscanf invece legge. Queste funzioni seguono per i parametri tutto ciò che abbiamo illustrato nel 2° tutorial, dove si parlava di variabili e tipi di dati, consultabile mediante il seguente link.
https://www.oneclicktutorial.com/programmazione/c-programming-tutorial-2-variabili-tipi-dati/
FUNZIONI FFLUSH E FCLOSE
In conclusione, gli stream, qualunque sia l’operazione effettuata su di essi, devono essere prima ‘ripuliti’ e poi chiusi. Per fare ciò si usano due funzioni quali fflush e fclose, descritte nel seguente modo:
fflush(FILE *stream);
fclose(FILE *stream);
Mostriamo un piccolo esempio chiarificatore:
Concludiamo questo articolo, elencando 4 funzioni che possono essere utili in operazioni di debug:
- eof()– Ritorna un valore vero (true) se lo stream raggiunge la fine del file;
- ferror()– Riporta uno stato di errore dello stream e ritorna vero (true) se ne incontra uno;
- clearerr()– Cancella le indicazioni di errore per un dato stream;
- fileno()– Ritorna il descrittore di file intero associato con lo stream.
Nel prossimo articolo parleremo di Librerie Personalizzate, se invece ti sei perso lo scorso articolo, si è parlato di Gestione di una Lista.
Stai cercando altre guide? Allora dai uno sguardo alla nostra raccolta dedicata alla Programmazione C.
Alla prossima!