DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 15 Maggio 2013.

Slides:



Advertisements
Presentazioni simili
File Linguaggio C.
Advertisements

Introduzione al linguaggio C++
INFORMATICA Altre Istruzioni di I/O
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Gestione dei file Ing. Simona Colucci.
INFORMATICA Algoritmi fondamentali
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 1: Marzo 2013 Marco D. Santambrogio – Gianluca Durelli -
Process synchronization
Introduzione al linguaggio C
I File di testo in Pascal
File System Cos’è un File System File e Directory
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Operazioni di I/O da console e da file in C standard
SC che operano su file (1)
Anno accademico Input e Output in C. Anno accademico Sommario Input e outputInput e output I flussi di I/O I flussi di I/O Luso.
INFORMATICA I file.
Programmazione Procedurale in Linguaggio C++
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
FILE DATI 16 lunedi 26 luglio giovedi ore 9 Come sappiamo, un file dati è un gruppo di informazioni tra loro correlate, memorizzate in un dispositivo di.
Algebra di Boole ed elementi di logica
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Recap sul C Marco D. Santambrogio – Ver. aggiornata al 11 Aprile 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
Algebra di Boole ed elementi di logica
Process synchronization
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 9 Maggio 2012.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 18 Aprile 2012.
Process synchronization
File.
Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Introduzione agli stream e alle classi
INFORMATICA I file. © Piero Demichelis 2 File Per rendere più uniforme possibile il comportamento dei programmi in relazione alla grande varietà dei dispositivi.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
Strutture di controllo in C -- Flow Chart --
Esercizi di riepilogo sul linguaggio C: file, puntatori, liste
1 Gestione dei File Corso di Informatica A Vito Perrone.
File di testo, file binari
Dichiarazioni e tipi predefiniti nel linguaggio C
SOFTWARE I componenti fisici del calcolatore (unità centrale e periferiche) costituiscono il cosiddetto Hardware (alla lettera, ferramenta). La struttura.
I File.
Le funzioni.
Espressioni condizionali
GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persi-stenza dei dati) è necessario poterli archi-viare.
File I record.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
1 Gestione dei File. 2 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi –Si usano dall'interno dei programmi Realizzano.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Esercizi su File.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 11 (Deitel) Lelaborazione dei file Sommario Introduzione La gerarchia dei dati 11.3.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 1: Marzo 2014 Marco D. Santambrogio – Gianluca Durelli -
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Ottobre 2014.
INTERFACCE Schede elettroniche che permettono al calcolatore di comunicare con le periferiche, che possono essere progettate e costruite in modo molto.
Programmazione Web PHP e MySQL 1. 2Programmazione Web - PHP e MySQL Esempio: un blog.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 13 e 14 GESTIONE DEI FILE A) Nozioni sulla gestione dei.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 13 e 14 -
Relazione sulle strutture dati Svolta da: Buccella Simone Strutture di dati Aree di memoria Puntatore numericibooleani alfabetici Statici dinamici Puntatori.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 14 Marzo 204.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 28 Ottobre 2014.
Capitolo 14 Diapositiva 1 Linguaggio C – Guida alla programmazione 2/ed – A. Bellini, A. Guidi Copyright © The McGraw-Hill Companies srl Archiviare.
Files in C++ Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 6 Marzo 2016.
Transcript della presentazione:

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 15 Maggio 2013

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEObiettivi Alcuni problemi aperti Il main() Allocazione dinamica della memoria Il salvataggio dei dati File File e OS File in C 2

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 3

HowTo: compilare ed eseguire Scritto e salvato il file sorgente (e.g., sul Desktop, nel file primo.c), Dobbiamo compilare ed eseguire un programma utilizzando una shell (e.g., bash) $ cd Desktop $ gcc primo.c –o exe $./exe 4 Per poter eseguire il nostro programma, bisogna tradurlo in codice macchina Questa operazione viene eseguita dal compilatore (e.g., gcc)

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE I comandi da shell $ cd Desktop $ gcc primo.c –o exe Cosa vi è di particolare in $ cd Desktop $ gcc primo.c –o exe Quale è il comando? cd, gcc Cosa sono Desktop e primo.c? 5

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Passaggio di parametri al main 6

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma ancora… $ cd Desktop $ gcc primo.c –o exe Quanti parametri passo a cd ? 1: Desktop Quanti parametri passo a gcc? 3: primo.c –o exe 7

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma quanti parametri posso passare? 8

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Vediamo tutti i parametri… 9

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE I programmi che abbiamo considerato finora…. Richiedono di conoscere a priori le dimensioni dei dati da elaborare (es. per un array bisogna sempre specificare la dimensione a tempo di compilazione) Strutture dati statiche Soluzione: strutture dati dinamiche Perdono dati di ingresso, risultati intermedi e risultati finali al termine dellesecuzione Volatilità delle variabili Soluzione: file 10

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Strutture dati dinamiche Servono per i casi in cui non è possibile stimare a priori la dimensione massima di una struttura dati E possibile allocare la memoria a tempo di esecuzione; il numero massimo di elementi può addirittura variare durante lesecuzione In C vengono realizzate attraverso luso dei puntatori...non approfondiremo oltre 11

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Non si deve fare!! int funzione(int vet[], int n){ /*Errore n non e noto a compile time! */ int vettoreAusiliario[n]; } 12

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 13

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) 14

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Identificazione dei file Possono esistere più file con lo stesso nome, purché abbiano una collocazione diversa nellalbero dei direttori Pathname: descrive tutto il percorso nellalbero dei direttori per raggiungere il file Il direttorio radice (root) assume il nome dellunità 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 dellultima 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 15

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File e programmi C In C laccesso 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 laccesso 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 16

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Uso dei file in ambiente C In ambiente C, per utilizzare un file allinterno 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 17

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Apertura di un file 1/2 File * fopen(nome_file, modalità) è la funzione per lapertura 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 18

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) ……… } 19

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Flussi di comunicazione standard I file in realtà sono già stati utilizzati prima Allinizio dellesecuzione 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 20

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 21

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 loperazione è 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 lelemento che conteneva il descrittore del file chiuso 22

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Un primo esempio 23

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 24

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 25

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 lapertura, il puntatore è posizionato allinizio 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 lapertura di un file è in scrittura, in modalità a (append), allora dopo lapertura 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 26

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 27

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 28

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 nellarea 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 29

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Accesso diretto ad un byte specifico long int ftell(FILE *fp) Restituisce il valore dellindicatore di posizione del prossimo byte a cui si può accedere int fseek (FILE *fp, long offset,int refpoint) Sposta lindicatore di posizione del prossimo byte a cui accedere del valore di offset (positivo o negativo) a partire da refpoint Restituisce 0 se loperazione è possibile rewind(FILE *fp) sposta lindicatore di posizione allinizio del file 30

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Creiamo e scriviamo su un file 31 La funzione fputs() scrive la stringa s su stream.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE E se volessimo sfruttare argv? 32

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

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 ); } 34 Clients.dat

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Fonti per lo studio + Credits Fonti per lo studio Credits Gianluca Palermo