I/O da file. Matrici. Stringhe. Memory leakage. Matrici, stringhe e I/O da file

Documenti analoghi
Matrici, stringhe e I/O da file

Corso di Informatica A.A

Corso di Informatica A.A

Il linguaggio C. Breve panoramica su stdio.h

Input / Output. Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard

Input / Output. Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

Linguaggio C: i file

Laboratorio di Programmazione

Operazioni su file di caratteri

Indice. La gestione dei file in C e gli stream. Apertura e chiusura di un file. Operazioni sui file. Accesso sequenziale e non sequenziale

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. File. Marco D. Santambrogio Ver. aggiornata al 6 Marzo 2016

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

Input / Output. Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard

Indice. La gestione dei file in C e gli stream. Apertura e chiusura di un file. Operazioni sui file. Accesso sequenziale e non sequenziale

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

Input/Output su File

Gestione dei file in C

Streams e disk files

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

File binari e file di testo

ELEMENTI DI INFORMATICA. Linguaggio C

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

Gestione dei file in C

Introduzione al C. Stream e disk file

Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 9 File

Gestione dei File in C

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

I files (archivi) Il C definisce in stdio.h tre file aperti automaticamente: stdin, stdout e stderr.! Sono ad accesso sequenziale diretto

Introduzione al C. Unità 9 File. D. Bloisi, S. Peluso, A. Pennisi, S. Salza

Perchè i files? Realizzano la persistenza dei dati. Sono delle strutture di dati sequenziali. dati che sopravvivono all esecuzione del programma

Files in C endofile

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Lezione 22: Input/Output e Files

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.

Settimana n.12. Obiettivi File!di!testo. Contenuti Concetto!di!file!e!funzioni! fopen/fclose Funzioni!fgets+sscanf Approfondimenti!su!printf! e!

Sommario FONDAMENTI DI INFORMATICA 1. Il tipo FILE. Passaggio da standard I/O. LINGUAGGIO C Gestione dei file

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 4 Ing. Gian Enrico Conti Dott.

Lezione 15. Introduzione

Gestione dei File. dischi nastri cd

Linguaggio C Gestione File

La gestione dei file in C

FILE: tipo operazione Istruì. prototipo esempi lettura di un carattere fgetc Int fgetc(file *flusso) Vedi sotto

Gestione dei File. Credits Prof. Campi

Librerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h

Gestione dei file. Linguaggio ANSI C Input/Output - 13

Lezione 11: Liste a Puntatori e Input/Output

I files in C. A cura del prof. Ghezzi

I file possono essere manipolati (aperti, letti, scritti ) all interno di programmi C. dischi nastri cd

Sulla libreria standard, III. Manipolare file con stdio.h

Librerie C. Corso di Linguaggi e Traduttori 1 AA

Esercitazioni di Fondamenti di Informatica - Lez. 9 4/12/2018

I file. un file è una sorgente/destinazione di dati per diversi attori

Laboratorio di Informatica

File. Titolo presentazione sottotitolo. Federico Reghenzani

Esercizi. I File ed il C

Lezione 7: Funzioni e gestione dei File

Prof. G. Ascia. Gestione dei File C

Gestione dei file in C

Lezione 8: Stringhe ed array multidimensionali

Lezione integrativa: Dal C++ al C

Introduzione. L elaborazione dei files in C. Elaborazione dei files (1) Elaborazione dei files (2) D.D. cap. 11+ pp K.P. pp.

I File. Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa.

Informatica (A-K) 23. Linguaggio C -8

Capitolo 5 -- Stevens

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

I File. Consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centarle.

Il linguaggio C I file

D Alcune funzioni della libreria standard del C

DOTT. ING. LEONARDO RIGUTINI DIPARTIMENTO INGEGNERIA DELL INFORMAZIONE UNIVERSITÀ DI SIENA VIA ROMA SIENA UFF

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

C: panoramica. Violetta Lonati

Corso di Fondamenti di Programmazione canale E-O. Introduzione. Elaborazione dei files (2)

Sommario ELEMENTI DI INFORMATICA. Passaggio da standard I/O. LINGUAGGIO C Gestione dei file

Corso di Laboratorio di Sistemi Operativi A.A

puntatori Lab. Calc. AA 2006/07 1

I File. File. File di testo. Esempi di file di testo. Gestione di file in C. Gestione di file in C

file fisico file logico

Fondamenti di Informatica

Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011

SOMMARIO SU LETTURA E SCRITTURA (I/O) DEGLI STANDARD FILES

Introduzione al C. Esercitazione 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria Clinica

Laboratorio di Algoritmi

Struttura dati FILE. Motivazioni: memorie a confronto

Le stringhe. Le stringhe sono sequenze di caratteri,

Input/output console file caratteri stringhe formattato ascii binari

Il linguaggio C I file. mylib.h contribuenti.txt. #include <stdio.h> #define N 25 Paolucci,Enrico, 24000,23.0. fornitori.dat

Dispensa 25 CORSO DI PROGRAMMAZIONE A.A CORSO DI LAUREA IN SCIENZE E TECNOLOGIE INFORMATICHE CESENA. Laboratorio

Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0

Introduzione al Linguaggio C

caratteri, immagini, suoni, ecc.

Caratteri e stringhe

Informatica C CHI/MAT

Gestione dei file. File di testo e binari

Transcript:

Matrici, stringhe e I/O da file Memory leakage Matrici Stringhe I/O da file

Memory Leakage (I) Se si perde il valore di un puntatore di una zona di memoria allocata, quella memoria non e piu utilizzabile dal processo e non e piu liberabile : rimane quindi proprieta del processo fino alla sua terminazione. main() { const int dim=10; int *b; b =(int *)MyMalloc(dim*sizeof(int)); //allochiamo printf( \n Indirizzo di b : %x", &b); printf( \n Indirizzo di b[0]: %x", &b[0]); b = (int *)MyMalloc(2*dim*sizeof(int)); //allochiamo ancora printf( \n Indirizzo di b : %x", &b); printf( \n Indirizzo di b[0]: %x", &b[0]); free(b);//libera la memoria allocata Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 2/21

Memory Leakage (II) main() { const int dim=10; int *b; b =(int *)MyMalloc(dim*sizeof(int)); //allochiamo printf( \n Indirizzo di b : %x", &b); printf( \n Indirizzo di b[0]: %x", &b[0]); free(b); b = (int *)MyMalloc(2*dim*sizeof(int)); //allochiamo ancora printf( \n Indirizzo di b : %x", &b); printf( \n Indirizzo di b[0]: %x", &b[0]); free(b);//libera la memoria allocata Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 3/21

Array di Puntatori Una matrice bidimensionale può essere rappresentata come un vettore a due indici, o come un vettore di puntatori main(){ const int dim = 3 ; int i,j; double a[3][3]= { {1.,0.,0.,{0.,1.,0.,{0.,0.,1. ; double *b[dim];/* a è una matrice quadrata di double b è un array di puntatori */ for(i=0;i<dim;i++) { b[i]=(double *)calloc(dim,sizeof(double)); //ora b è una matrice quadrata inizializzata a zero for(i=0;i<dim;i++){ for(j=0;j<dim;j++) { b[i][j]=a[i][j] ; Un vettore di double per ciascun puntatore Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 4/21

Puntatori a Puntatori Un array di puntatori è un puntatore a puntatori! main(){ const int dim = 3 ; int i,j; double a[3][3]= { {1.,0.,0.,{0.,1.,0.,{0.,0.,1. ; double **b; // b è un puntatore ad un puntatore ad un double b=(double **)calloc(dim,sizeof(double *)) for(i=0;i<dim;i++) { b[i]=(double *)calloc(dim,sizeof(double)); //ora b è una matrice quadrata inizializzata a zero for(i=0;i<dim;i++){ for(j=0;j<dim;j++) { b[i][j]=a[i][j] ; Vettore di puntatori, uno per riga Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 5/21

Matrici come argomento di funzioni I puntatori a puntatori sono spesso l unico mezzo pratico di passare matrici come argomenti di funzioni. Ciò accade perché il compilatore ha bisogno che nel prototipo e nella definizione della funzione venga specificata ogni dimensione di un array successiva alla prima. Ad esempio volendo costruire una funzione per calcolare la trasposta si avrebbe: void trasponi3{double a[][3],double at[][3]) { const int dim = 3 ; int i,j; for(i=0;i<dim;i++){ for(j=0;j<dim;j++) { at[i][j]=a[j][i]..e se volessi calcolare la trasposta di una matrice 4X4?? Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 6/21

Esempio void trasponi4{double a[][4],double at[][4]) { const int dim = 4 ; int i,j; for(i=0;i<dim;i++){ for(j=0;j<dim;j++) { at[i][j]=a[j][i] oppure, per poter calcolare la trasposta di QUALSIASI matrice Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 7/21

Esempio II void trasponi (double **a,double **at,int dim) { /* a e at sono matrici >*dinamiche*< allocate altrove */ int i,j; for(i=0;i<dim;i++){ for(j=0;j<dim;j++) { at[i][j]=a[j][i] Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 8/21

Stringhe In C una stringa è semplicemente un array di variabili di tipo char terminata nella rappresentazione interna dal carattere speciale \0. L array contiene quindi un elemento in più rispetto al numero di caratteri. #include<stdio.h> main(){ char *s1, s2[]= Hello world!, *s3; s1=s2; s3= Hello again! ; printf( %s\n%s\n%s\n,s1,s2,s3); *(s1+1)= a ; printf( %s\n%s\n%s\n,s1,s2,s3); Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 9/21

Manipolazione di stringhe La libreria standard del C fornisce una serie di utili funzioni per la manipolazione di stringhe, definite nell header string.h char *strcopy(s, ct) char *strncopy(s, ct, n) char *strcat(s, ct) char *strncat(s, ct, n) int strcmp(cs, ct) size_t strlen(cs) copia ct in s, compreso lo \0 e ritorna s idem ma per i primi n caratteri di ct concatena ct al termine di s e ritorna s idem ma per i primi n caratteri di ct confronta cs e ct; il risultato è <0 se cs<ct, 0 se cs==ct, >0 se cs>ct ritorna la lunghezza di cs Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 10/21

Esempio #include<stdio.h> #include<string.h> main(){ char *s1, s2[]= Hello, *s3; s1 = world! ; s3 = again! ; s3 = strcat(s2,s3); s1 = strcat(s2,s1); printf( %s\n%s\n,s1,s3); if(strcmp(s1,s3)>0) printf( %s precede %s\n,s1,s3); else printf( %s precede %s\n,s3,s1); Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 11/21

Gestione dei files Il C permette di gestire i files sia ad alto livello, tramite puntatori a strutture di tipo FILE che a basso livello, più direttamente collegato al sistema operativo, tramite i cosiddetti descrittori di file. Ci concentreremo sull accesso ad alto livello. Per poter accedere ad un file da un programma C la prima operazione da effettuare è l apertura del file. La funzione di libreria fopen, definita in stdio.h accetta in ingresso un nome file, esegue le necessarie trattative col sistema operativo e restituisce un puntatore a una struttura di tipo FILE che deve essere utilizzata nelle successive operazioni sul file stesso. In questo modo si ha accesso allo stream di bytes rappresentato dal file stesso. FILE *fopen(char *name, char *mode); Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 12/21

Apertura dei files Se il file che stro cercando di aprire in lettura non esiste (ad es. ho sbagliato a scrivere il nome) o non ho il permesso di aprire in scrittura il file di output la chiamata ad fopen restituisce un puntatore a NULL. In tal caso dovrei segnalare un errore ed uscire. Posso farlo ad es. reidfinendo una opportuna funzione MyFopen in analogia con quanto fatto per MyMalloc: FILE *MyFopen(char *name, char *mode) { FILE *f; f = fopen(name,mode); if(f==null) { fprintf(stderr, Error opening file %s,name); exit(1); return f; Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 13/21

Esempio #include <stdio.h> int main(){ FILE *infile, *outfile, *logfile, *tempfile; infile = MyFopen( dati.dat, r ); /* infile è il puntatore ad un file di nome dati.dat aperto in sola lettura ( r )*/ outfile = MyFopen( risultati.txt, w ); /* w sta per write (scrittura) */ logfile = MyFopen( registro.log, a ); /* a sta per append (aggiunta in coda)*/ tempfile = MyFopen( tmpfile.dat, w+ ); /* w+ (o r+) sta per lettura-scrittura */ return 0; Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 14/21

fprintf e fscanf Le funzioni principali per l I/O formattato da file sono : int fprintf(file * fp, const char *format, ); int fscanf(file * fp, const char *format, ); Il primo argomento è un puntatore a FILE (ad es. il risultato di una chiamata a fopen). Gli altri argomenti (la stringa di formato e la sequenza di argomenti opzionali) seguono le stesse identiche convenzioni usate per printf e scanf. In effetti il C mette a disposizione tre puntatori stdin, stdout, stderr per i file standard di I/O. Si ha allora : printf( Hello ); fprintf(stdout, Hello ); scanf( %d,&i); fscanf(stdin, %d,&i); Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 15/21

Altre funzioni di I/O su file Funzioni per l I/O di singoli caratteri: int fgetc(file * fp); int fputc(int c, FILE * fp); Funzioni per l I/O diretto di bytes senza conversioni: size_t fread(void *pt,size_t dimensioneelemento, size_t numeroelementi, FILE * fp); size_t fwrite(const void *pt,size_t dimensioneelemento, size_t numeroelementi, FILE * fp); Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 16/21

End of File e condizioni di errore Nelle operazioni di accesso a file possono verificarsi delle condizioni di errore: ad esempio una chiamata a fread può restituire un numero di elementi letti inferiore a quello previsto se viene incontrata la fine del file (EOF) prima di aver letto tutti gli elementi. Parimenti, fwrite può scrivere un numero inferiore di elementi se si verifica una condizione di errore nell accesso al file. Per controllare il verificarsi di condizioni di end of file o di errore si usano le funzioni: int feof(file * fp); int ferror(file * fp); Esse ritornano un valore diverso da zero se trovano alzata la flag di fine file e quella di errore rispettivamente per lo stream fp. Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 17/21

Posizionamento su file long ftell(file * fp); int fseek(file * fp, long offset, int place); void rewind(file *fp); ftell restituisce la posizione corrente all interno del file. fseek posiziona l indice di posizione del file a offset bytes da place, che può assumere i valori SEEK_SET (inizio file), SEEK_CUR (posizione corrente) oppure SEEK_END(fine file). Se il file è un file di testo fseek va usata solo con place=seek_set e offset ottenuto da una precedente chiamata a ftell. rewind posiziona l indice del file a inizio file: rewind(fp) fseek(fp, 0L, SEEK_SET) Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 18/21

Un esempio /* scrive un file al contrario in un altro file */ #include <stdio.h> int main(){ FILE *ifp, *ofp; const int MAXCHARS=100; char inp_name[maxchars], out_name[maxchars]; int c; printf( \nnome file in ingresso\n ); scanf( %s,inp_name); printf( \nnome file in uscita\n ); scanf( %s,out_name); ifp = MyFopen(inp_name, r ); ofp = MyFopen(out_name, w ); /* segue */ Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 19/21

segue /* segue */ fseek(ifp,0,seek_end); /* si sposta alla fine del file */ fseek(ifp,-1,seek_cur); /* si sposta indietro di un byte = 1 carattere */ while(ftell(ifp)>0){ c=fgetc(ifp) ; /*legge il carattere e sposta in avanti il puntatore di posizione file */ fputc(ofp,c); /* stampa il carattere sull output */ fseek(ifp,-2,seek_cur); /* torna indietro di due caratteri*/ fclose(ifp); /* chiude il file in ingresso */ fclose(ofp); /*chiude il file di output */ return 0; Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 20/21

Interfaccia con il sistema operativo La gestione dei file è uno di quei casi in cui il linguaggio C si trova a comunicare più strettamente con il sistema operativo. Una funzione molto generale e molto utile per comunicare con il sistema è la seguente : int system(char *command); Il controllo viene passato al sistema operativo, che interpreta la stringa command come un comando, lo esegue e ritorna il controllo al programma C. Ad es. in UNIX system( date ) causa la stampa della data e ora corrente immagazzinata nell OS. L uso di system va fatto con molta attenzione nei casi in cui sia fondamentale la portabilità da un sistema all altro. Corso di Informatca AA. 2005-2006 Matrici, Stringhe & I/o D a File 21/21