Informazioni sui file
I file sono contenitori di informazioni caratterizzati da un nome. Un file può essere acceduto da più programmi diverse volte. Ogni file è codificato in byte e può essere immaginato come una sequenza di informazioni. Nei sistemi operativi, l'informazione viene gestita in maniera sequenziale.
Gestione dei file
Il sistema operativo permette di fare molte cose con i file, come:
- Cancellare file
- Creare file
- Scrittura o lettura di file
I file possono essere gestiti come stringhe testuali o come file binari. Ogni file è caratterizzato da un descrittore, che contiene informazioni sulla modalità di accesso (lettura o scrittura) e sulla posizione corrente nel file. L'indicatore di fine file (EOF) segnala la fine del file.
Descrittori di file in C
In C esiste il tipo di dato FILE, che rappresenta il descrittore di un file. È un riferimento al puntatore del descrittore di file.
Ad esempio, la dichiarazione *FILE fp; indica un puntatore al descrittore di file. Vi sono tre file standard che si aprono automaticamente ogni volta: stdin, stdout e stderr.
Se si vuole aprire un altro file, bisogna:
- Aprire il file
- Accedere alla lettura o scrittura
- Chiudere il file
Apertura di un file
La funzione fopen è utilizzata per aprire un file. La sintassi è:
FILE *fp;
fp = fopen("nome_file", "modo");
Il nome_file è una stringa che contiene il nome del file che vogliamo aprire, mentre il modo determina come vogliamo aprire il file:
- "w": Scrittura testuale (attenzione "DOPPI APICI")
- "r": Lettura testuale
- "wb": Scrittura binaria
- "rb": Lettura binaria
Ad esempio:
FILE *fp;
fp = fopen("dati.txt", "w");
La funzione fopen restituisce un puntatore al file se l'operazione di apertura è andata a buon fine, altrimenti restituisce NULL se il file non esiste, è protetto, o è corrotto. In tal caso, si consiglia di gestire l'errore con un messaggio, ad esempio:
if (fp == NULL) {
printf("Errore nell'apertura del file");
}
Chiusura di un file
La funzione fclose è utilizzata per chiudere un file. Restituisce 0 se l'operazione è andata a buon fine, altrimenti restituisce EOF (-1).
int fclose(FILE *fp);
Attenzione: Gestire correttamente i file è essenziale per evitare perdite di dati.