La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.

Presentazioni simili


Presentazione sul tema: "DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014."— Transcript della presentazione:

1 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 21 Maggio 2014

2 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEObiettivi Il salvataggio dei dati  File File e OS File in C 2

3 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE I programmi che abbiamo considerato finora…. Perdono dati di ingresso, risultati intermedi e risultati finali al termine dell’esecuzione  Volatilità delle variabili  Soluzione: file 3

4 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE I file I file sono contenitori di informazioni: sequenze di byte associate ad un nome Ci sono due tipi fondamentali di file:  File Binari: sequenza di byte  File Testuali: sequenza di caratteri, suddivisi in linee terminate da un carattere di newline; ciascun byte è la codifica ASCII di un carattere alfanumerico (alcuni caratteri possono essere caratteri di controllo non printable) Memorizzati in modo permanente in memoria di massa  Necessari come archivio di informazioni persistenti, visto che la memoria di lavoro è invece volatile 4

5 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE I file e il sistema operativo Gestiti dal sistema operativo (gestione del file system)  Risolve la corrispondenza tra nome del file e tracce/settori del disco in cui è memorizzato  Invia i comandi al driver del disco (interfaccia di I/O) per leggere da o scrivere su file (trasferimento tra memoria di massa e memoria centrale) Per organizzare in modo conveniente grandi quantità di file, questi sono raccolti in directory (cartelle) 5

6 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Identificazione dei file Possono esistere più file con lo stesso nome, purché abbiano una collocazione diversa nell’albero dei direttori Pathname: descrive tutto il percorso nell’albero dei direttori per raggiungere il file  Il direttorio radice (root) assume il nome dell’unità disco, che nei PC è C:  Es.: il file FILE3 nel direttorio Lisa ha pathname C:\user\lisa\FILE3 I file sono generalmente dotati di attributi  Data e ora di creazione o dell’ultima modifica  Dimensioni espresse in numero di byte Il compito di gestire i file e caricarli nella memoria di lavoro, quando richiesto, è svolto dal sistema operativo 6

7 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File e programmi C In C l’accesso ai file da parte di un programma avviene tramite le funzioni disponibili nella libreria stdio.h Le funzioni di libreria della stdio.h interagiscono con il sistema operativo per consentire l’accesso a file  Al loro interno le funzioni di libreria contengono delle chiamate a funzioni di sistema operativo  Sfruttano la chiamate al sistema operativo (dette primitive) per creare, cancellare, scrivere, leggere da file 7

8 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Uso dei file in ambiente C In ambiente C, per utilizzare un file all’interno di un programma è necessario:  Aprire un “flusso di comunicazione”, cioè aprire il file  Accedere a file in lettura e/o scrittura  Chiudere il “flusso di comunicazione”, cioè chiudere il file Se un file viene aperto in una certa modalità (binario o testuale):  Le operazioni sul file devono essere effettuate in modo congruente, tenendo conto del tipo di file  Se creo un file in formato binario devo leggerlo sempre in formato binario 8

9 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Apertura di un file 1/2 File * fopen(“nome_file”, “modalità”) è la funzione per l’apertura del file  riceve in ingresso il nome del file da aprire e il modo in cui lo si vuole aprire  restituisce il puntatore al descrittore del file creato Alla chiamata della funzione  il sistema operativo crea un nuovo descrittore di file nella tabella dei file aperti  inizializza i campi del descrittore  restituisce il puntatore a tale descrittore. Questo puntatore rappresenta il nome logico del file, associato al nome fisico indicato come parametro della fopen  una volta aperto il file, questo può essere acceduto indicando il solo nome logico 9

10 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Apertura di un file 2/2 In un programma C, un file è rappresentato da un puntatore al descrittore del file Un programma C che utilizza un file deve dichiarare una variabile puntatore, ad esempio:  FILE *fp; Il programma fa riferimento al file (nel suo complesso) tramite tale variabile (fp) #include main() { FILE *fp; fp=fopen(“ordine.txt”, “r”) ……… } 10

11 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Modalità di apertura di un file “r”  sul file sarà possibile eseguire solo operazioni di lettura.  Se il file non esiste, la funzione fopen restituisce il codice di errore NULL “w”  sul file sarà possibile eseguire solo operazioni di scrittura ad inizio file  Se il file non esiste viene automaticamente creato “r+”  sul file sarà possibile eseguire sia operazioni di lettura che di scrittura  Se il file non esiste, la funzione fopen restituisce il codice di errore NULL “w+”  sul file sarà possibile eseguire sia operazioni di lettura che di scrittura.  Se il file non esiste, viene automaticamente creato, in caso contrario il contenuto preesistente del file viene perso (sovrascrittura) “a”  sul file sarà possibile eseguire solo operazioni di scrittura in coda al file.  Se il file non esiste viene automaticamente creato, altrimenti il contenuto preesistente del file non viene perso “rb, wb, rb+, wb+, ab+”  stesso significato di cui sopra ma per file binari 11

12 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Chiusura di un file La chiusura di un file è possibile attaverso la funzione fclose int fclose (FILE *fp) Riceve in ingresso il puntatore del file da chiudere Restituisce  0 se l’operazione è andata a buon fine  !=0 se non è andata a buon fine Alla chiamata,  il sistema operativo chiude il file referenziato dal puntatore  assegna al puntatore il valore NULL  libera l’elemento che conteneva il descrittore del file chiuso 12

13 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Un primo esempio 13

14 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Gestione degli errori int feof(FILE *p)  Restituisce !=0 se durante la lettura si incontra EOF 0 se non si è incontrata la fine del file  Accedere ad un file in una zona oltre la fine del file è considerato errore int ferror(FILE *p)  Restituisce !=0 se durante la lettura non si è verificato errore 0 se si è verificato errore 14

15 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Formato dei file e Lettura/scrittura La lettura e la scrittura  devono essere operazioni simmetriche  dipendono dal tipo di file La struttura delle informazioni inserite in un file sono definite da chi crea il file Se il file è testuale i caratteri letti/scritti possono essere soggetti ad interpretazione  Per esempio il carattere ascii 10 indica il comando di “a capo”  Questo carattere non viene letto o scritto ma viene attivato il comando che manda a capo la prossima riga Se il file è binario i caratteri letti/scritti non sono interpretati  Quindi se scrivo il carattere con codice ascii 10 in un file binario viene scritto proprio il carattere con codice 10 15

16 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Accesso Sequenziale Le operazioni di lettura e scrittura accedono al file in modo sequenziale, e mantengono traccia del punto in cui si è arrivati nella scrittura del file Dopo l’apertura, il puntatore è posizionato all’inizio del file, dopo si sposta di un numero di byte pari a quelli che sono stati letti (scritti) e trasferiti in (da) memoria centrale Se l’apertura di un file è in scrittura, in modalità “a” (append), allora dopo l’apertura il puntatore è posizionato a fine file La funzione feof(fp), indica se il file pointer è posizionato a fine file  feof(fp) != 0 se il file pointer è posizionato a fine file  feof(fp) == 0 negli altri casi 16

17 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lettura e scrittura di file testuali 1/2 In un file testuale possono leggere e scrivere  Un carattere per volta ( fgetc, fputc )  Un blocco formattato ( fscanf, fprintf ) int fgetc (FILE *fp)  legge il prossimo carattere dal file specificato come parametro int fputc (int c, FILE *fp)  scrive sul file specificato come parametro il carattere specificato come parametro Esistono anche le funzioni getc e putc  Hanno lo stesso prototipo e sono equivalenti  Hanno una diversa implementazioni 17

18 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lettura e scrittura di file testuali 2/2 int fscanf(FILE *fp, stringa_controllo, variabili)  Ha la stesso effetto della scanf ma legge da file  La scanf è la fscanf in un cui fp punta a stdin int fprintf(FILE *fp, stringa_controllo, variabili)  Ha la stesso effetto della printf ma scrive sul file  La printf è la fprintf in un cui fp punta a stdout Tutte queste funzioni restituiscono EOF in caso di errore 18

19 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Creiamo e scriviamo su un file 19

20 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lettura e scrittura di blocchi di byte int fread (void *punt, dim_blocco, num_blocchi, FILE *fp)  Legge dal file fp un numero di byte pari a dim_blocco*num_blocchi e li memorizza nell’area di memoria puntata da punt  Restituisce il numero di byte letti int fwrite (void *punt, dim_blocco, num_blocchi, FILE *fp)  Scrive sul file fp un numero di byte pari a dim_blocco*num_blocchi letti dall’ area di memoria puntata da punt  Restituisce il numero di byte scritti 20

21 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Accesso diretto ad un byte specifico long int ftell(FILE *fp)  Restituisce il valore dell’indicatore di posizione del prossimo byte a cui si può accedere int fseek (FILE *fp, long offset,int refpoint)  Sposta l’indicatore di posizione del prossimo byte a cui accedere del valore di offset (positivo o negativo) a partire da refpoint  Restituisce 0 se l’operazione è possibile rewind(FILE *fp)  sposta l’indicatore di posizione all’inizio del file 21

22 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Scriviamo con fpritnf e manipoliamo un file 22

23 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Flussi di comunicazione standard I file in realtà sono già stati utilizzati dalla prima lezioe All’inizio dell’esecuzione di un programma C vengono automaticamente aperti 3 flussi di comunicazione standard rappresentati da 3 variabili implicite di tipo puntatore a FILE  stdin: associato al file che rappresenta il dispositivo di ingresso standard (tastiera)  stdout: associato al file che rappresenta il dispositivo di uscita standard (video)  stderr: associato al file che rappresenta il dispositivo di uscita standard (video) printf scrive sul file a cui fa riferimento il puntatore stdout scanf legge dal file cui fa riferimento stdin 23

24 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stampiamo a video… 24

25 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Legge e mostra a video un file di testo 25 La funzione putchar() scrive il carattere c su stdout.

26 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lettura sequenziale di un file #include main(){ int account; char name[ 30 ]; double balance; FILE *cfPtr; /* cfPtr = clients.dat file pointer */ cfPtr = fopen( "clients.dat", "r" ); if ( cfPtr == NULL ) printf( "File could not be opened\n" ); else { printf( "%-15s %-15s %s\n", "Account", "Name", "Balance" ); fscanf( cfPtr, "%d%s%lf", &account, name, &balance ); while ( !feof( cfPtr ) ) { printf( "%-15d%-15s%7.2f\n", account, name, balance ); fscanf( cfPtr, "%d%s%lf", &account, name, &balance ); } fclose( cfPtr ); } 26 Clients.dat

27 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Fonti per lo studio + Credits Fonti per lo studio  http://digilander.libero.it/uzappi/C/ Credits  Gianluca Palermo


Scaricare ppt "DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014."

Presentazioni simili


Annunci Google