I file
Di cosa parla
- Introduzione ai File:
- I file sono archivi di memoria permanente utilizzati per salvare dati (input e output) per un riutilizzo futuro.
- Sono gestiti dal sistema operativo attraverso un file system e funzioni dedicate accessibili tramite la libreria
<stdio.h>. - In C, i file sono visti come strutture dati sequenziali, lette e scritte come uno stream di byte (file binari o di testo).
- Le periferiche (stdin, stdout, stderr) sono trattate come file.
- Operazioni Fondamentali sui File:
- Per essere utilizzato, un file deve essere aperto e successivamente chiuso.
- La variabile che consente la comunicazione tra programma e file è
FILE*(puntatore a una struttura). - Sequenza Operativa:
- Dichiarazione di
FILE*. - Apertura del file con
fopen(). - Esecuzione delle operazioni di lettura/scrittura.
- Chiusura del file con
fclose().
- Dichiarazione di
- Descrittore di File:
- È una struttura dati di tipo
struct FILE, un indice in una tabella del sistema operativo che associa un blocco di controllo del file (FCB) al programma. - Contiene informazioni come la modalità d'uso ('w' per write, 'r' per read, 'a' per append), la posizione della testina, la dimensione del file e la posizione di fine documento (EOF), ed eventuali errori.
fopen()restituisce un puntatore a questo descrittore (oNULLin caso di errore), efclose()restituisce0(successo) oEOF(errore).
- È una struttura dati di tipo
- Gestione Errori e Stato del File:
ferror(FILE *fp): restituisce0se nessun errore, altrimenti un codice specifico.feof(FILE *fp): restituisce0se la testina non è alla fine del file.
- Modalità di Apertura:
'r': apre in modalità lettura.'w': apre in modalità scrittura (crea o tronca file esistente).'a': apre in modalità append (crea o aggiunge alla fine di un file esistente).- Per file binari, si aggiunge la
'b'(es.'rb','wb','ab'). - Esistono anche modalità miste come
'r+','w+','a+'per lettura e scrittura combinate.
- Funzioni di I/O (File di Testo):
- Formattate:
fprintf(FILE *fp, ...)per scrivere,fscanf(FILE *fp, ...)per leggere. - Per Carattere:
fgetc(FILE *fp)per leggere,fputc(int c, FILE *fp)per scrivere. - Per Linea:
fgets(char *s, int n, FILE *fp)per leggere una riga,fputs(char *s, FILE *fp)per scrivere una riga.
- Formattate:
- Funzioni di I/O (Blocchi di Byte):
fread(void *buffer, size_t size, size_t count, FILE *stream): legge un blocco di dati.fwrite(const void *buffer, size_t size, size_t count, FILE *stream): scrive un blocco di dati.
- Accesso Diretto a Byte:
fseek(FILE *fp, long offset, int refpoint): imposta la posizione della testina.refpointpuò essereSEEK_SET(inizio),SEEK_CUR(corrente),SEEK_END(fine).ftell(FILE *fp): restituisce la posizione corrente della testina rispetto all'inizio.rewind(FILE *fp): riavvolge il file e riporta la testina all'inizio.