LA LIBRERIA STANDARD DEL C

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "LA LIBRERIA STANDARD DEL C"

Transcript

1 LA LIBRERIA STANDARD DEL C La libreria standard del C La libreria standard del C è in realtà un insieme di librerie Per usare una libreria, non occorre inserirla esplicitamente. Ogni file sorgente che ne faccia uso deve includere lo header opportune che contiene le dichiarazioni necessari Librerie standard input-output stdio.h funzioni matematiche math.h gestione di stringhe string.h operazioni su caratteri ctype.h Fondamenti di Informatica 2 gestione dinamica della memoria stdlib.h 1

2 Input/Output Lettura e scrittura Caratteri e Stringhe: Terminale e file Input/output console file caratteri stringhe formattato ascii binari Fondamenti di Informatica 3 Il modello di coordinazione del C Libreria standard stdio.h l input avviene di norma dal canale standard di input (stdin) l output avviene di norma dal canale standard di output (stdout) input e output avvengono sotto forma di una sequenza di caratteri tale sequenza è terminata dal carattere speciale EOF (end of file), che varia da una piattaforma ad un altra di norma il canale standard stdin coincide con la tastiera di norma il canale standard stdout coincide con il video esiste inoltre un altro canale di output, riservato ai messaggi di errore: stderr Fondamenti di Informatica 4 2

3 Il modello di coordinazione di base Poiché sui canali di I/O fluiscono insiemi di caratteri il modello di coordinazione prevede due operazioni base scrivere un carattere su un canale di output putchar(ch); leggere un carattere dal canale si input ch = getchar(); Ogni altro tipo di I/O può essere costruito a partire da queste operazioni primitive Fondamenti di Informatica 5 Lettura e Scrittura di Caratteri int getchar(int c); stdio.h legge un carattere sul canale di intput stdin restituisce il carattere letto, EOF nel caso che la sequenza sia finita e in caso di errore la stdin è generalmente la tastiera ma potrebbe non esserlo la lettura è bafferizzata effettua l echo e attende invio int putchar(int c); stdio.h scrive un carattere sul canale di output (di norma il monitor) restituisce il carattere scritto, EOF in caso di errore Fondamenti di Informatica 6 3

4 Lettura e Scrittura di Caratteri Non sono standard e quindi non vanno usate int getch(void); conio.h ritorna immediatamente ignorando il buffer non attende l invio non è standard non fa l eco sullo schermo int getche(void); come getch() ma fa l eco sullo schermo. void printstring(char s[]) {while (*s) putschar(*s++); putchar( \n ); void readstring(char s[]) {int c; while ((c=getchat())!= EOF && c!= \n ) *s++=c; *s = \0 ; Fondamenti di Informatica 7 Lettura e Scrittura di Stringhe char * gets( char *s ); legge una stringa da tastiera e la memorizza nella locazione indicata nel parametro s. L ingresso dei dati viene concluso con un CR che viene trasformato in \0 char * puts(char *s); visualizza sullo schermo il contenuto dell argomento di tipo stringa, seguito da un CR. Questa funzione riconosce i caratteri speciali. Il tempo necessario alla sua esecuzione e inferiore a quello necessario per printf() #include <stdio.h> #include <string.h> void main( void ) { char s[80]; do { gets(s); puts(s); while( strlen(s)!= 0 ); Fondamenti di Informatica 8 4

5 I/O di valori numerici Dato un numero intero calcolare la stringa di caratteri che lo rappresenta e scrivere tale stringa sull output standard void printinteger(int x) { char s[20]; itoa(x,s,2); puts(s); Dato una stringa calcolare il numero intero che rappresenta void readinteger(int * x) { char s[20]; gets(s); *x = atoi(s); Fondamenti di Informatica 9 Input/Output Formattato Le operazioni di ingresso/uscita avvengono sempre tramite un formato che resta sotto il controllo del programmatore. int printf( stringa di controllo, elencoargomenti ); la stringa di controllo puo contenere due tipi di elementi: caratteri che vengono scritti inalterati sullo schermo. direttive di conversione che descrivono il modo in cui gli argomenti devono essere visualizzati. Le direttive di conversione sono costituite da un segno % seguito dal carattere di conversione. printf() consente l utilizzo di un numero molto grande di specificatori di formato. La funzione restituisce il numero di caratteri scritti o un numero negativo in caso di errore printf( ora scrivo un intero %d, oppure una %s\n, 10, Stringa ); Fondamenti di Informatica 10 5

6 Input/Output Formattato %c singolo carattere a %d, %i intero con segno -10 %e, %E notazione scientifica 1e+10 %f virgola mobile 1.25 %g, %G il piu breve fra %e e %f %o ottale senza segno %s stringa di caratteri %u intero senza segno %x, %X esadecimale xf5 %p puntatore %% visualizza % Fondamenti di Informatica 11 Modificatori di Formato Gli specificatori di formato possono avere varianti che cambiano parzialmente il significato, specificando l ampiezza dei campi, il numero delle cifre decimali e l allineamento rispetto al margine sinistro. Ampiezza minima del campo: un intero posto fra il segno % e lo specificatre di formato %10d Precisione: permette di specificare il numero di cifre decimali in un numero in virgola mobile. %10.3f Allineamento: un segno - dopo il segno % fa in modo che il campo venga stampato allineato a sinistra. %-10s Il modificatore # fa stampare la variabile di tipo g, f ed e sempre con il punto decimale. Nel caso del formato x premette il prefisso 0x Fondamenti di Informatica 12 6

7 int scanf( char * stringadicontrollo, elencoargomenti) permette di leggere dati dal dispositivo di ingresso Gli specificatori di formato sono analoghi a quelli della funzione printf. La presenza di caratteri diversi da quelli di formato permettono la lettura di questi caratteri senza che vengano memorizzati. Gli argomenti di scanf sono indirizzi E possibile specificare alcuni modificatori di formato fra cui la massima ampiezza del campo da leggere. Ad esempio scanf( %10s %10s,... ) legge al massimo dieci caratteri per ogni stringa Fondamenti di Informatica 13 I Files 7

8 I file Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persistenza dei dati) è necessario poterli archiviare su memoria di massa Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni su memoria di massa Concettualmente, un file è una sequenza di registrazioni (record) dello stesso tipo Un file è un astrazione di memorizzazione di dimensione potenzialmente illimitata (ma non infinita), ad accesso sequenziale Fondamenti di Informatica 15 Il concetto di file Una testina di lettura/scrittura (concettuale) indica in ogni istante il record corrente: inizialmente, la testina si trova per ipotesi sulla prima posizione dopo ogni operazione di lettura / scrittura, essa si sposta sulla registrazione successiva È illecito operare oltre la fine del file Fondamenti di Informatica 16 8

9 File e Sistema Operativo A livello di sistema operativo un file è denotato univocamente dal suo nome assoluto, che comprende il percorso e il nome relativo In certi sistemi operativi il percorso può comprendere anche il nome dell unità in DOS o Windows: C:\temp\prova1.c In UNIX e Linux: /usr/temp/prova1.c Fondamenti di Informatica 17 Apertura e chiusura di un file Poiché un file è un entità del sistema operativo, per agire su esso dall interno di un programma occorre stabilire una corrispondenza fra: il nome del file come risulta al sistema operativo un nome di variabile definita nel programma Dopo l'apertura, il programma opera sul file utilizzando la variabile che lo rappresenta: il sistema operativo provvederà a effettuare l operazione richiesta sul file associato a tale simbolo Al termine, la corrispondenza dovrà essere soppressa: operazione di chiusura del file Fondamenti di Informatica 18 9

10 File in C Il tipo FILE è una struttura definita in header standard stdio.h, che l utente non ha necessità di conoscere nei dettagli (che spesso cambia da un compilatore all altro) Le strutture FILE non sono mai gestite direttamente dall utente, ma solo dalle funzioni della libreria standard stdio L utente definisce e usa, nei suoi programmi, solo dei puntatori a FILE Fondamenti di Informatica 19 Il modello di file in C Libreria standard stdio l input avviene da un canale di input associato a un file aperto in lettura l output avviene su un canale di output associato a un file aperto in scrittura Due tipi di file: file binari e file di testo basterebbero i file binari, ma fare tutto con essi sarebbe scomodo i file di testo, pur non indispensabili, rispondono a un esigenza pratica molto sentita Fondamenti di Informatica 20 10

11 File in C: apertura Per aprire un file si usa la funzione: FILE* fopen(char fname[], char modo[]) Questa funzione apre il file di nome fname nel modo specificato, e restituisce un puntatore a FILE (che punta a una nuova struttura FILE appositamente creata) ATTENZIONE alle convenzioni dipendenti dal sistema operativo usato (\ oppure / nei Fondamenti di Informatica 21 percorsi, presenza o assenza di unità, ) File in C: apertura FILE* fopen(char fname[], char modo[]) modo specifica come aprire il file: r apertura in lettura (read) w apertura in scrittura (write) a apertura in aggiunta (append) seguita opzionalmente da: t apertura in modalità testo (default) b apertura in modalità binaria ed eventualmente da Fondamenti di Informatica 22 + apertura con possibilità di modifica 11

12 File in C: apertura FILE* fopen(char fname[], char modo[]) Il valore restituito da fopen() è un puntatore a FILE, da usare in tutte le successive operazioni sul file: NULL in caso l apertura sia fallita controllarlo è il solo modo per sapere se il file si sia davvero aperto se non si è aperto, il programma non può proseguire procedura exit() I canali predefiniti standard (stdin, stdout, stderr) sono dei file già aperti: quindi, il loro tipo è FILE* Fondamenti di Informatica 23 File in C: chiusura Per chiudere un file si usa la funzione: int fclose(file*) Il valore restituito da fclose() è un intero: 0 se tutto è andato bene EOF in caso di errore Prima della chiusura, tutti i buffer vengono svuotati Fondamenti di Informatica 24 12

13 Fine del file La fine del file può essere rilevata: o in base all esito delle operazioni di lettura È l'approccio standard del C: prima si tenta una operazione di lettura, poi si guarda se è andata a buon fine, controllando il valore da essa restituito o perché si intercetta il carattere di EOF Attenzione: lo speciale carattere EOF (End-Of-File) varia da una piattaforma all altra Fondamenti di Informatica 25 File di testo Un file di testo è un file che contiene sequenze di caratteri È un caso estremamente frequente, con caratteristiche proprie: esiste un concetto di riga e di fine riga ( \n ) certi caratteri sono stampabili a video (quelli di codice >= 32), altri no la sequenza di caratteri è chiusa dal carattere speciale EOF Fondamenti di Informatica 26 13

14 File di testo e canali standard I canali di I/O standard non sono altro che file di testo già aperti stdin è un file di testo aperto in lettura, di norma agganciato alla tastiera stdout è un file di testo aperto in scrittura, di norma agganciato al video stderr è un altro file di testo aperto in scrittura, di norma agganciato al video Le funzioni di I/O disponibili per i file di testo sono una generalizzazione di quelle già note per i canali di I/O standard Fondamenti di Informatica 27 File di testo e canali standard Funzione da console int getchar(void); int putchar(int c); char* gets(char* s); int puts(char* s); int printf(...); int scanf(...); Funzione da file int fgetc(file* f); int fputc(int c, FILE* f); char* fgets(char* s,int n, FILE* f); int fprintf(file* fputs(char* s, f, FILE*...); f); int fscanf(file* f,...); tutte le funzioni da file acquistano una f davanti nel nome (qualcuna però cambia leggermente nome) tutte le funzioni da file hanno un parametro in più, che è appunto il puntatore al FILE aperto Fondamenti di Informatica 28 14

15 I/O di caratteri: getchar() vs. fgetc() int fgetc(file* f); Restituisce il successivo carattere contenuto nel file f, oppure EOF se incontra la fine del file int fputc(int c, FILE* f); Scrive il carattere c sul file f. Restituisce il carattere scritto, oppure EOF in caso di errore getchar() e putchar() sono delle scorciatoie linguistiche per fgetc() e fputc() getchar() fgetc(stdin) putchar(c) fputc(c, stdout) Fondamenti di Informatica 29 I/O di linee: fputs e fgets char* fgets(char* s, int n, FILE* f); Legge al più i successivi n-1 caratteri dal file f e li inserisce nel vettore s, bloccandosi prima se incontra un carattere di fine linea ( \n ) La stringa s viene terminata con uno \0 Restituisce s, oppure NULL se incontra la fine del file oppure rileva un errore int fputs(char* s, FILE* f); Scrive la stringa s sul file f. Restituisce un valore non negativo se non ci sono errori, oppure EOF se si verifica un errore Fondamenti di Informatica 30 15

16 I/O formattato: fprintf e fscanf int fprintf(file* f,...); int fscanf(file* f,...); fprintf e fscanf operano così come le rispettive funzioni (printf e scanf) su stdin e stdout, ma agiscono sul file f indicato come primo parametro Fondamenti di Informatica 31 Esempio 1 Salvare su un file di testo prova.txt ciò che viene battuto sulla tastiera #include <stdio.h> #include <stdlib.h> main(){ FILE* fp; fp = fopen("prova.txt","w"); if (fp==null) exit(1); /* Non si è aperto */ else { int c; fp è NULL se non c è spazio su disco o esso è protetto da scrittura while ((c=getchar())!=eof) Per generare EOF: fputc(c, fp); - CTRL+Z (su DOS/Windows) fclose(fp); - CTRL+D (Unix/Linux) Fondamenti di Informatica 32 16

17 Esempio 2 Stampare a video il contenuto di un file di testo prova.txt fp può essere NULL se il file richiesto non esiste #include <stdio.h> #include <stdlib.h> main(){ FILE* fp; if ((fp = fopen("prova.txt", r"))==null) exit(1); /* Errore di apertura */ else { int c; while ((c=fgetc(fp))!=eof) putchar(c); fclose(fp); Fondamenti di Informatica 33 Esempio 3 È dato un file di testo people.txt le cui righe rappresentano ciascuna i dati di una persona, secondo il seguente formato: cognome (al più 30 caratteri) uno o più spazi nome (al più 30 caratteri) uno o più spazi sesso (un singolo carattere, 'M' o 'F') uno o più spazi anno di nascita Fondamenti di Informatica 34 17

18 Esempio 3 Si vuole scrivere un programma che legga riga per riga i dati dal file e ponga i dati in un array di persone (poi svolgeremo elaborazioni su essi) Un possibile file people.txt: Rossi Mario M 1947 Ferretti Paola F 1982 Verdi Marco M 1988 Bolognesi Annarita F Fondamenti di Informatica 35 Esempio 3 1) Definire il tipo persona Occorre definire una struct adatta a ospitare i dati elencati: cognome array di 30+1 caratteri nome array di 30+1 caratteri sesso array di 1+1 caratteri non è la sola scelta anno di nascita un intero possibile (ma è comoda ) typedef struct { char cognome[31], nome[31], sesso[2]; int anno; persona; Fondamenti di Informatica 36 18

19 Esempio 3 Poi, nel main: 2) definire un array di persona 3) aprire il file in lettura int main() { persona v[dim]; FILE* f = fopen("people.txt", "r"); apertura in lettura if (f==null) { Fondamenti di Informatica 37 Esempio 3 Poi, nel main: 2) definire un array di persona 3) aprire il file in lettura int main() { persona v[dim]; FILE* f = fopen("people.txt", "r"); if (f==null) { perror( Il file non esiste! );... exit(1); exit(n) fa terminare il programma, restituendo al s.o. il valore n come codice di errore perror(msg) stampa un messaggio d errore sul canale stderr Fondamenti di Informatica 38 19

20 Esempio 3 Poi, nel main: 4) leggere una riga per volta, e porre i dati di quella persona in una cella dell'array Come organizzare la lettura? Dobbiamo leggere delle stringhe separate una dall'altra da spazi Sappiamo che ogni singola stringa (cognome, nome, sesso) non contiene spazi Scelta più pratica: fscanf Fondamenti di Informatica 39 Esempio 3 Cosa far leggere a fscanf? Tre stringhe separate una dall'altra da spazi si ripete tre volte il formato %s Un intero si usa il formato %d Il fine riga occorre specificare in fondo \n fscanf(f, "%s%s%s%d\n", ) Fino a quando si deve leggere? Quando il file termina, fscanf restituisce EOF basta controllare il valore restituito Si continua fintanto che è diverso da EOF while(fscanf( )!=EOF)... Fondamenti di Informatica 40 20

21 Esempio 3 Dove mettere quello che si legge? Abbiamo definito un array di persona, v Struttura fatta di cognome, nome, sesso, anno ciò che si estrae da una riga va nell'ordine in v[k].cognome, v[k].nome, v[k].sesso, v[k].anno E dopo aver letto una riga? La testina di lettura sul file è già andata a capo, perché il formato di lettura prevedeva esplicitamente di consumare il fine linea (\n) L'indice k invece indica ancora la cella appena occupata occorre incrementarlo, affinché indichi la prossima cella Fondamenti di Informatica 41 libera Esempio 3 Poi, nel main: 4) leggere una riga per volta, e porre i dati di quella persona in una cella dell'array int main() { int k=0; /* indice per array */... while(fscanf(f,"%s%s%s%d\n", v[k].cognome, v[k].nome, v[k].sesso, &v[k].anno )!= EOF){ k++; /* devo incrementare k */ esplicita dell indirizzo della variabile Ricorda: lintero richiede l estrazione Fondamenti di Informatica 42 21

22 Esempio 3 Poi, nel main: 4) leggere una riga per volta, e porre i dati di quella persona in una cella dell'array Ricordare: fscanf elimina automaticamente gli spazi che separano una stringa dall'altra, quindi non si devono inserire spazi nella stringa di formato fscanf considera finita una stringa al primo spazio che trova, quindi non si può usare questo metodo per leggere stringhe contenenti spazi Fondamenti di Informatica 43 Esempio 3: programma completo #define DIM 30 #include <stdio.h> #include <stdlib.h> typedef struct { char cognome[31], nome[31], sesso[2]; int anno; persona; int main() { persona v[dim]; int k=0; FILE* f; if ((f=fopen("people.txt", "r"))==null) { perror("il file non esiste!"); exit(1); while(fscanf(f,"%s%s%s%d\n", v[k].cognome, v[k].nome, v[k].sesso, &v[k].anno )!= EOF) k++; Fondamenti di Informatica 44 22

23 Esempio 3: variante E se usassimo un singolo carattere per rappresentare il sesso? Non più: typedef struct { char cognome[31], nome[31], sesso[2]; int anno; persona; Ma: typedef struct { char cognome[31], nome[31], sesso; int anno; persona; Fondamenti di Informatica 45 Esempio 3: variante Cosa cambierebbe? fscanf elimina automaticamente gli spazi prima di leggere una stringa o un numero (intero o reale)... ma non prima di leggere un singolo carattere, perché se lo facesse non riuscirebbe a leggere il carattere spazio Ma noi non sappiamo quanti spazi ci sono fra nome e sesso Quindi, non possiamo sapere a priori dov'è il carattere che ci interessa Fondamenti di Informatica 46 23

24 Esempio 3: variante Infatti, il nostro file potrebbe essere fatto così: Rossi Mario M 1947 Ferretti Paola F 1982 Verdi Marco M 1988 Bolognesi Annarita F Qui uno spazio prima di M Qui due spazi prima di F Qui tre spazi prima di M Qui uno spazio prima di F prima, dicendo a fscanf si leggere una stringa, gli spazi (uno, due, tre..) erano eliminati comunque adesso, dicendo a fscanf si leggere un carattere singolo, dobbiamo decidere noi cosa fare Fondamenti di Informatica 47 Esempio 3: variante Due possibilità: scelta 1: introdurre comunque una stringa di due caratteri e usarla per far leggere il carattere relativo al sesso a fscanf Poi, copiare il primo carattere al suo posto scelta 2: costruirsi un ciclo che salti tutti gli spazi fino al primo carattere non-spazio, poi recuperare quest'ultimo non consente più di usare fscanf per gestire tutta la fase di lettura Fondamenti di Informatica 48 24

25 Variante 1... typedef struct { char cognome[31], nome[31], sesso; Stringa ausiliaria int anno; persona; int main() { persona v[dim]; int k=0; FILE* f; char s[2]; if ((f=fopen("people.txt", "r"))==null) { perror("il file non esiste!"); exit(1); while(fscanf(f,"%s%s%s%d\n", v[k].cognome, v[k].nome, s, &v[k].anno )!= EOF){ v[k].sesso = s[0]; Copiatura caratteri k++; Fondamenti di Informatica 49 Variante 2... typedef struct { char cognome[31], nome[31], sesso; int anno; persona; int main() { persona v[dim]; int k=0; FILE* f; char ch; if ((f=fopen("people.txt", "r"))==null) { perror("il file non esiste!"); exit(1); while(fscanf(f,"%s%s", v[k].cognome,v[k].nome)!= EOF){ while((ch=fgetc(f))==' '); v[k].sesso = ch; fscanf(f,"%d\n",&v[k].anno); k++; Fondamenti di Informatica 50 25

26 Variante 2: alternativa... typedef struct { char cognome[31], nome[31], sesso; int anno; persona; int main() { persona v[dim]; int k=0; FILE* f; char ch; if ((f=fopen("people.txt", "r"))==null) { perror("il file non esiste!"); exit(1); while(fscanf(f,"%s%s", v[k].cognome,v[k].nome)!= EOF){ do fscanf(f, %c, &ch); while (ch== ); v[k].sesso = ch; fscanf(f,"%d\n",&v[k].anno); k++; Fondamenti di Informatica 51 Esempio 4 È dato un file di testo elenco.txt le cui righe rappresentano ciascuna i dati di una persona, secondo il seguente formato: cognome (esattamente 10 caratteri) nome (esattamente 10 caratteri) sesso (esattamente un carattere) anno di nascita I primi due possono contenere spazi al loro interno NB: non sono previsti spazi espliciti di separazione Fondamenti di Informatica 52 26

27 Esempio 4 Cosa cambia rispetto a prima? sappiamo esattamente dove iniziano e dove finiscono i singoli campi non possiamo sfruttare gli spazi per separare cognome e nome Un possibile file elenco.txt: Rossi Mario M1947 Ferretti Paola F1982 De Paoli Gian MarcoM1980 Verdi Marco M1988 Bolognesi Annarita F I vari campi possono essere attaccati: tanto, sappiamo a priori dove inizia l uno e finisce l altro Fondamenti di Informatica 53 Esempio 4 Come fare le letture? non possiamo usare fscanf(f,"%s", ) si fermerebbe al primo spazio potrebbe leggere più caratteri del necessario (si pensi a Gian MarcoM1988) però possiamo usare fscanf nell'altra modalità, specificando quanti caratteri leggere. Ad esempio, per leggerne dieci: fscanf(f,"%10c", ) Così legge esattamente 10 caratteri, spazi inclusi Fondamenti di Informatica 54 27

28 Esempio 4 ATTENZIONE: fscanf(f,"%10c", ) In questo modo viene riempito un array di caratteri, senza inserire alcun terminatore di stringa. Occorre aggiungerlo a parte v[k].nome[10] = \0 ; Fondamenti di Informatica 55 Esempio 4: programma completo... typedef struct { char cognome[11], nome[11], sesso; int anno; persona; int main() { persona v[dim]; int k=0; FILE* f; if ((f=fopen("elenco.txt", "r"))==null) { perror("il file non esiste!"); exit(1); while(fscanf(f,"%10c%10c%c%d\n", v[k].cognome, v[k].nome, &v[k].sesso, &v[k].anno )!= EOF){ v[k].cognome[10] = \0 ; v[k].nome[10] ='\0'; k++; Fondamenti di Informatica 56 28

29 File binari Un file binario è una pura sequenza di byte, senza alcuna strutturazione particolare È un'astrazione di memorizzazione assolutamente generale, usabile per memorizzare su file informazioni di qualsiasi natura "fotografie" della memoria rappresentazioni interne binarie di numeri immagini, audio, musica,....volendo, anche caratteri I file di testo non sono indispensabili: sono semplicemente comodi Fondamenti di Informatica 57 File binari Un file binario è una sequenza di byte Può essere usato per archiviare su memoria di massa qualunque tipo di informazione Input e output avvengono sotto forma di una sequenza di byte La fine del file è rilevata in base all esito delle operazioni di lettura non c'è EOF, perché un file binario non è una sequenza di caratteri qualsiasi byte si scegliesse come marcatore, potrebbe sempre capitare nella sequenza Fondamenti di Informatica 58 29

30 File binari Poiché un file binario è una sequenza di byte, sono fornite due funzioni per leggere e scrivere sequenze di byte fread() legge una sequenza di byte fwrite() scrive una sequenza di byte Essendo pure sequenze di byte, esse non sono interpretate. Quindi, possono rappresentare qualunque informazione (testi, numeri, immagini ) Fondamenti di Informatica 59 Output binario: fwrite() Sintassi: int fwrite(addr, int dim, int n, FILE *f); scrive sul file n elementi, ognuno grande dim byte (complessivamente, scrive quindi n dim byte) gli elementi da scrivere vengono prelevati dalla memoria a partire dall indirizzo addr restituisce il numero di elementi (non di byte) effettivamente scritti, che possono essere meno di n Fondamenti di Informatica 60 30

31 Input binario: fread() Sintassi: int fread(addr, int dim, int n, FILE *f); legge dal file n elementi, ognuno grande dim byte (complessivamente, tenta di leggere quindi n dim byte) gli elementi da leggere vengono scritti in memoria a partire dall indirizzo addr restituisce il numero di elementi (non di byte) effettivamente letti, che possono essere meno di n se il file finisce prima. Controllare il valore restituito è il solo modo per sapere cosa è stato letto, e in particolare per scoprire se il file è finito Fondamenti di Informatica 61 Esempio 1 Salvare su un file binario numeri.dat il contenuto di un array di dieci interi #include <stdio.h> #include <stdlib.h> main(){ FILE *fp; int vet[10] = {1,2,3,4,5,6,7,8,9,10; if ((fp = fopen("numeri.dat","wb"))==null) exit(1); /* Errore di apertura */ fwrite(vet, sizeof(int), 10, fp); fclose(fp); L operatore sizeof() è essenziale per la portabilità: la dimensione di int non è fissa Fondamenti di Informatica 62 31

32 Esempio 2 Leggere da un file binario numeri.dat una sequenza di interi, scrivendoli in un array #include <stdio.h> #include <stdlib.h> int main(){ FILE *fp; int vet[40], i, n; if ((fp = fopen("numeri.dat","rb"))==null) exit(1); /* Errore di apertura */ n = fread(vet,sizeof(int),40,fp); for (i=0; i<n; i++) printf("%d ",vet[i]); fclose(fp); fread tenta di leggere 40 interi, ne legge meno se il file finisce prima n contiene il numero di interi effettivamente letti Fondamenti di Informatica 63 Esempio 3 Scrivere su un file di caratteri testo.txt una sequenza di caratteri #include <stdio.h> #include <stdlib.h> main(){ FILE *fp; int n; Dopo averlo creato, provare ad aprire questo file con un editor di testi qualunque ( e il terminatore?) char msg[] = "Ah, l'esame\nsi avvicina!"; if ((fp = fopen("testo.txt","wb"))==null) exit(1); /* Errore di apertura */ fwrite(msg, strlen(msg)+1, 1, fp); fclose(fp); Un carattere in C ha sempre size 1 Scelta: salvare anche il terminatore Fondamenti di Informatica 64 32

33 Esempio 4 Leggere da un file di caratteri testo.txt una sequenza di caratteri, ponendoli in una stringa #include <stdio.h> #include <stdlib.h> main(){ FILE *fp; char msg[80], n; if ((fp = fopen("testo.txt","rb"))==null) exit(1); /* Errore di apertura */ n = fread(msg, 1, 80, fp); puts(msg); fclose(fp); N contiene il numero di char effettivamente letti (che non ci interessa, perché tanto c è il terminatore) Fondamenti di Informatica 65 Esempio 5: output di numeri L uso di file binari consente di rendere evidente la differenza fra la rappresentazione interna di un numero e la sua rappresentazione esterna come stringa di caratteri in una certa base Supponiamo che sia int x = 31466; Che differenza c è fra: fprintf(file,"%d", x); Fondamenti di Informatica 66 fwrite(&x, sizeof(int), 1, file); 33

34 Esempio 5: output di numeri Se x è un intero che vale 31466, internamente la sua rappresentazione è (su 16 bit): fwrite() emette direttamente tale sequenza, scrivendo quindi i due byte sopra indicati fprintf() invece emette la sequenza di caratteri ASCII corrispondenti alla rappresentazione esterna del numero 31466, ossia i cinque byte Se per sbaglio si emettessero su un file di testo (o su video) direttamente i due byte: si otterrebbero i caratteri corrispondenti al codice ASCII di quei byte: êz Fondamenti di Informatica 67 Esempio 6: input di numeri Analogamente, che differenza c è fra fscanf(file, "%d", &x); e fread(&x, sizeof(int), 1, file); nell ipotesi che il file (di testo) contenga la sequenza di caratteri 23? Fondamenti di Informatica 68 34

35 Esempio 6: input di numeri fscanf() preleva la stringa di caratteri ASCII che costituisce la rappresentazione esterna del numero, e la converte nella corrispondente rappresentazione interna, ottenendo i due byte: che rappresentano in binario il valore ventitre Fondamenti di Informatica 69 Esempio 6: input di numeri fread() invece preleverebbe i due byte Carattere 2 Carattere 3 credendoli già la rappresentazione interna di un numero, senza fare alcuna conversione Tale modo di agire porterebbe a inserire nella variabile x esattamente la sequenza di byte sopra indicata, che verrebbe quindi interpretata come il numero tredicimilacentosei Fondamenti di Informatica 70 35

36 Esempio completo file binario È dato un file di binario people.dat i cui record rappresentano ciascuno i dati di una persona, secondo il seguente formato: cognome (al più 30 caratteri) nome (al più 30 caratteri) sesso (un singolo carattere, 'M' o 'F') anno di nascita Si noti che la creazione del file binario deve essere fatta da programma, mentre per i file di testo può essere fatta con un text editor Fondamenti di Informatica 71 Esempio completo file binario È necessario scrivere un programma che lo crei strutturandolo in modo che ogni record contenga una typedef struct { char cognome[31], nome[31], sesso[2]; int anno; persona; I dati di ogni persona da inserire nel file vengono richiesti all utente tramite la funzione leggiel() che non ha parametri e restituisce come valore di ritorno la struct persona letta. Quindi il prototipo è: persona leggiel(); Fondamenti di Informatica 72 36

37 Creazione file binario persona leggiel(){ persona e; printf( Cognome? "); scanf("%s", e.cognome); printf("\n Nome? "); scanf("%s",e.nome); printf("\nsesso? "); scanf("%s",e.sesso); printf("\nanno nascita? "); scanf("%d", &e.anno); return e; Fondamenti di Informatica 73 Creazione file binario... typedef struct { char cognome[31], nome[31], sesso[2]; int anno; persona; main(){ FILE *f; persona e; int fine=0; if ((f=fopen( people.dat, "wb"))==null) exit(1); while (!fine) { e=leggiel(); fwrite(&e,sizeof(persona),1,f); printf("\nfine (SI=1, NO=0)? "); scanf("%d", &fine); fclose(f); Fondamenti di Informatica 74 37

38 Creazione file binario L esecuzione del programma precedente crea il file binario contenente i dati immessi dall utente. Solo a questo punto il file può essere utilizzato Il file people.dat non è visualizzabile tramite un text editor: questo sarebbe il risultato rossi > T 8 â3 mario ôü _ ôü Aw O F _ DÝ M nuinh2ô1 ô1 ô1 Fondamenti di Informatica 75 Esempio completo file binario Ora si vuole scrivere un programma che legga record per record i dati dal file ponga i dati in un array di persone (poi svolgeremo elaborazioni su essi) Fondamenti di Informatica 76 38

39 Esempio completo file binario 1) Definire il tipo persona Occorre definire una struct adatta a ospitare i dati elencati: cognome array di 30+1 caratteri nome array di 30+1 caratteri sesso array di 1+1 caratteri anno di nascita un intero typedef struct { non è la sola scelta char cognome[31], nome[31], sesso[2]; int anno; persona; possibile (ma è comoda ) Fondamenti di Informatica 77 Esempio completo file binario Poi, nel main: 2) definire un array di persona 3) aprire il file in lettura (modalità binaria) int main() { persona v[dim]; FILE* f = fopen("people.dat", "rb"); if (f==null) { perror( Il file non esiste! ); exit(1);... exit(n) fa terminare il programma, restituendo al s.o. il valore n come codice di errore perror(msg) stampa un messaggio d errore sul canale stderr Fondamenti di Informatica 78 39

40 Esempio completo file binario Poi, nel main: 4) leggere i record dal file (non c è più il concetto di riga), e porre i dati di quella persona in una cella dell'array Come organizzare la lettura? int fread(addr, int dim, int n, FILE *f); legge dal file n elementi, ognuno grande dim byte (complessivamente, tenta di leggere quindi n dim byte) gli elementi da leggere vengono scritti in memoria a partire dall indirizzo addr Fondamenti di Informatica 79 Esempio completo file binario Cosa far leggere a fread? L intero vettore di strutture: unica lettura per DIM record fread(v,sizeof(persona),dim,f) Un record alla volta all interno di un ciclo i=0; while(!feof(f)){ fread(&v[i],sizeof(persona),1,f); i++; Fondamenti di Informatica 80 40

41 Esempio completo file binario: variante 1 #define DIM 30 #include <stdio.h> #include <stdlib.h> typedef struct { char cognome[31], nome[31], sesso[2]; int anno; persona; main() { persona v[dim]; int i=0; FILE* f; if ((f=fopen("people.dat", "rb"))==null) { printf("il file non esiste!"); exit(1); while(fread(&v[i],sizeof(persona),1,f)>0){ i++; Fondamenti di Informatica 81 Esempio completo file binario: variante 2 #define DIM 30 #include <stdio.h> #include <stdlib.h> typedef struct { char cognome[31], nome[31], sesso[2]; int anno; persona; main() { persona v[dim]; int i=0; FILE* f; if ((f=fopen("people.dat", "rb"))==null) { printf("il file non esiste!"); exit(1); fread(v,sizeof(persona),dim,f); Fondamenti di Informatica 82 41

42 File Binari: feof() int feof(file *fp) controlla se nella precedente operazione di lettura/scrittura sul file cui fa riferimento fp è stata raggiunta la fine del file. Restituisce: 0 se la condizione di fine file non è stata raggiunta un valore diverso da 0 in caso contrario Fondamenti di Informatica 83 File: accesso diretto In alcuni casi può risultare utile accedere direttamente ad un particolare byte all interno di un file. Vengono usate le seguenti funzioni di libreria: fseek ftell rewind Fondamenti di Informatica 84 42

43 File: accesso diretto int fseek(file *fp, long offset, int origin) Consente di spostare arbitrariamente la testina di lettura/scrittura per un file fp : file su cui si sta operando offset : dà la posizione, rispetto a origin, a cui portarsi sul file (è espresso in byte è può assumere valori positivi o negativi) N.B.: per un file di testo deve valere 0 o un valore restituito da ftell origin : dà la posizione rispetto a cui misurare l offset Fondamenti di Informatica 85 File: accesso diretto origin può assumere i seguenti tre valori: SEEK_SET: indica l inizio del file SEEK_CUR: indica la posizione corrente SEEK_END: indica la fine del file Fondamenti di Informatica 86 43

44 File: accesso diretto long ftell(file *fp) Restituisce la posizione corrente nel file specificato Fondamenti di Informatica 87 File: accesso diretto void rewind(file *fp) Posiziona la testina di lettura/scrittura all inizio del file rewind(f) equivale a fseek(f, 0, SEEK_SET) Fondamenti di Informatica 88 44

FILE BINARI FILE BINARI FILE BINARI. OUTPUT BINARIO: fwrite()

FILE BINARI FILE BINARI FILE BINARI. OUTPUT BINARIO: fwrite() FILE BINARI Un file binario è una pura sequenza di byte, senza alcuna strutturazione particolare È un'astrazione di memorizzazione assolutamente generale, usabile per memorizzare su file informazioni di

Dettagli

! I file di testo non sono indispensabili: sono semplicemente comodi 1. Sintassi:

! I file di testo non sono indispensabili: sono semplicemente comodi 1. Sintassi: Un file binario è una pura sequenza di byte, senza alcuna strutturazione particolare! È un'astrazione di memorizzazione assolu -tamente generale, usabile per memorizza -re su file informazioni di qualsiasi

Dettagli

Input/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari

Input/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari Input/Output Lettura e scrittura Caratteri e Stringhe: Terminale e file Input/output console file caratteri stringhe formattato ascii binari Linguaggio ANSI C Input/Output - 1 La libreria standard del

Dettagli

Un file è un astrazione di memorizzazione di dimensione potenzialmente illimitata (ma non infinita), ad accesso sequenziale.

Un file è un astrazione di memorizzazione di dimensione potenzialmente illimitata (ma non infinita), ad accesso sequenziale. IL CONCETTO DI FILE Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni su memoria di massa. Concettualmente, un file è una sequenza di registrazioni

Dettagli

GESTIONE DEI FILE persistenza archiviare file astrazione fornita dal sistema operativo dimensione potenzialmente illimitata ad accesso sequenziale

GESTIONE DEI FILE persistenza archiviare file astrazione fornita dal sistema operativo dimensione potenzialmente illimitata ad accesso sequenziale GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persistenza dei dati) è necessario poterli archiviare su memoria di massa Un file è una astrazione fornita

Dettagli

GESTIONE DEI FILE IL CONCETTO DI FILE APERTURA E CHIUSURA DI UN FILE OPERARE SUI FILE

GESTIONE DEI FILE IL CONCETTO DI FILE APERTURA E CHIUSURA DI UN FILE OPERARE SUI FILE GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persistenza dei dati) è necessario poterli archiviare su memoria di massa Un file è una astrazione fornita

Dettagli

FILE BINARI FILE BINARI

FILE BINARI FILE BINARI FILE BINARI Un file binario è una pura sequenza di byte, senza alcuna strutturazione particolare È un'astrazione di memorizzazione assolutamente generale, usabile per memorizzare su file informazioni di

Dettagli

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

I file possono essere manipolati (aperti, letti, scritti ) all interno di programmi C. dischi nastri cd Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persistenza dei dati) è necessario poterli archiviare su memoria di massa. dischi nastri cd GESTIONE DEI FILE I file possono

Dettagli

FILE BINARI FILE BINARI

FILE BINARI FILE BINARI FILE BINARI Un file binario è una pura sequenza di byte, senza alcuna strutturazione particolare È un'astrazione di memorizzazione assolutamente generale, usabile per memorizzare su file informazioni di

Dettagli

Una testina di lettura/scrittura (ideale) indica in ogni istante il record corrente:

Una testina di lettura/scrittura (ideale) indica in ogni istante il record corrente: Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persistenza dei dati) è necessario poterli archiviare su memoria di massa! Un file è una astrazione fornita dal sistema

Dettagli

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

Gestione dei file. Linguaggio ANSI C Input/Output - 13 Gestione dei file Necessità di persistenza dei file archiviare i file su memoria di massa. Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni

Dettagli

GESTIONE DEI FILE IL CONCETTO DI FILE

GESTIONE DEI FILE IL CONCETTO DI FILE GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persistenza dei dati) è necessario poterli archiviare su memoria di massa Un file è una astrazione fornita

Dettagli

FILE BINARI. I file di testo non sono indispensabili: sono semplicemente comodi!

FILE BINARI. I file di testo non sono indispensabili: sono semplicemente comodi! FILE BINARI Un file binario è una pura sequenza di byte, senza alcuna strutturazione particolare. È un'astrazione di memorizzazione assolutamente generale, usabile per memorizzare su file informazioni

Dettagli

FILE BINARI. I file di testo non sono indispensabili: sono semplicemente comodi 1

FILE BINARI. I file di testo non sono indispensabili: sono semplicemente comodi 1 FILE BINARI Un file binario è una pura sequenza di byte, senza alcuna strutturazione particolare È un'astrazione di memorizzazione assolutamente generale, usabile per memorizzare su file informazioni di

Dettagli

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

GESTIONE DEI FILE. I file possono essere manipolati (aperti, letti, scritti ) all interno di programmi C. dischi nastri cd Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persistenza dei dati) è necessario poterli archiviare su memoria di massa. dischi nastri cd GESTIONE DEI FILE I file possono

Dettagli

FILE BINARI. I file di testo non sono indispensabili: sono semplicemente comodi 1

FILE BINARI. I file di testo non sono indispensabili: sono semplicemente comodi 1 FILE BINARI Un file binario è una pura sequenza di byte, senza alcuna strutturazione particolare È un'astrazione di memorizzazione assolutamente generale, usabile per memorizzare su file informazioni di

Dettagli

Le librerie standard. ! La libreria standard del C è in realtà un insieme di librerie

Le librerie standard. ! La libreria standard del C è in realtà un insieme di librerie ! La libreria standard del C è in realtà un insieme di librerie! Per usare una libreria, non occorre inse -rirla esplicitamente nel progetto: ogni ambiente di sviluppo sa già dove cercarle! Ogni file sorgente

Dettagli

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C LIBRERIE STANDARD in C La libreria standard del C è in realtà un insieme di librerie Per usare una libreria, non occorre inserirla esplicitamente nel progetto: ogni ambiente di sviluppo sa già dove cercarle

Dettagli

Struttura dati FILE. Motivazioni: memorie a confronto

Struttura dati FILE. Motivazioni: memorie a confronto Struttura dati FILE Motivazioni: memorie a confronto La memoria centrale (RAM) è tecnologia elettronica basata su Le memorie secondarie sono basate su tecnologie magnetiche (HD) o ottiche (CD, DVD) Conseguenze

Dettagli

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

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009 Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2

Dettagli

Struttura dati FILE. Concetto di FILE

Struttura dati FILE. Concetto di FILE Struttura dati FILE Concetto di FILE Per poter mantenere disponibili dei dati tra diverse esecuzioni di un programma (PERSISTENZA dei dati), è necessario poterli archiviare su memoria di massa. Un file

Dettagli

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

IL CONCETTO DI FILE. È illecito operare oltre la fine del file. IL CONCETTO DI FILE Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni su memoria di massa. Concettualmente, un file è una sequenza di registrazioni

Dettagli

I files in C. A cura del prof. Ghezzi

I files in C. A cura del prof. Ghezzi I files in C A cura del prof. Ghezzi 1 Perchè i files? Realizzano la persistenza dei dati dati che sopravvivono all esecuzione del programma Sono delle strutture di dati sequenziali 2 Files e S.O. I files

Dettagli

Gestione dei File. dischi nastri cd

Gestione dei File. dischi nastri cd Gestione dei File Per mantenere disponibili i dati tra le diverse esecuzioni di un programma, questi si devono archiviare in file su memoria di massa (dati persistenti): dischi nastri cd Un file è un astrazione

Dettagli

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

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico Gestione dei file Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2016 2017 Gli stream Si dice stream qualsiasi sorgente di dati in ingresso e qualsiasi

Dettagli

La gestione dei file in C

La gestione dei file in C Gestione dei file La gestione dei file in C Il file è un astrazione molto ampia nella descrizione di un sistema informatico nastro di I/O supporto di comunicazione macchina/ambiente di ogni tipo (sensori,

Dettagli

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

Introduzione. L elaborazione dei files in C. Elaborazione dei files (1) Elaborazione dei files (2) D.D. cap. 11+ pp K.P. pp. Introduzione L elaborazione dei files in C D.D. cap. 11+ pp. 569-572 K.P. pp. 581-583 La memorizzazione dei dati nelle variabili e nei vettori è temporanea: tutti quei dati andranno persi quando il programma

Dettagli

File binari e file di testo

File binari e file di testo I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file

Dettagli

Suggerimenti, note utili ed errori comuni. Fondamenti di informatica T

Suggerimenti, note utili ed errori comuni. Fondamenti di informatica T Suggerimenti, note utili ed errori comuni Fondamenti di informatica T printf, scanf e stringhe di formato La lettura e scrittura di variabili in formato testo sono realizzate tramite printf e scanf sfruttando

Dettagli

Linguaggio C: i file

Linguaggio C: i file Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica A - GES Prof. Plebani A.A. 2006/2007 Linguaggio C: i file La presente dispensa e da utilizzarsi ai soli fini didattici previa

Dettagli

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

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente

Dettagli

Introduzione al C. Stream e disk file

Introduzione al C. Stream e disk file Introduzione al C Stream e disk file Stream Un canale è una sequenza di byte di dati Sorgente o destinazione di dati che possono essere associati ad un disco o ad altre periferiche Due tipi di stream:

Dettagli

file fisico file logico

file fisico file logico I files Un file è una struttura di dati residente su una memoria di massa (file fisico) Un programma vede un file come una sequenza di bytes (file logico) Generalizzando, un file può comprendere qualsiasi

Dettagli

Scrittura formattata - printf

Scrittura formattata - printf Esercizi su Input/Output con formato FormattedIO 1 Scrittura formattata - printf Funzione printf int printf ( , ) La funzione restituisce un valore intero uguale ai caratteri

Dettagli

Esercizi. I File ed il C

Esercizi. I File ed il C Politecnico di Milano Esercizi File di testo,, file binari I File ed il C Insieme omogeneo di dati, memorizzato su disco e caratterizzato da un nome La lunghezza di un file non è fissata a priori Astrazione

Dettagli

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. File. Marco D. Santambrogio Ver. aggiornata al 15 Maggio 2013 File Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 15 Maggio 2013 Obiettivi Alcuni problemi aperti Il main() Allocazione dinamica della memoria Il salvataggio dei dati File File

Dettagli

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

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi lisi@di.uniba.it Sommario Generalità sui file in C I file ad accesso sequenziale I file di testo Riferimenti

Dettagli

Caratteri e stringhe

Caratteri e stringhe Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un

Dettagli

Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011

Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011 Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I/O in C Il sistema di I/O del C è una interfaccia uniforme

Dettagli

Linguaggio C Gestione File

Linguaggio C Gestione File Gestione File: Il file è l'unità logica di memorizzazione dei dati su memoria di massa, che consente una memorizzazione persistente dei dati non limitata dalle dimensioni della memoria centrale. Nel linguaggio

Dettagli

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

FILE: tipo operazione Istruì. prototipo esempi lettura di un carattere fgetc Int fgetc(file *flusso) Vedi sotto FILE: tipo operazione Istruì. prototipo esempi lettura di un carattere fgetc Int fgetc(file *flusso) Vedi sotto alla volta Scrittura di un fputc Int fputc(int ch, FILE *flusso); carattere alla volta Lettura

Dettagli

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

I file. un file è una sorgente/destinazione di dati per diversi attori I file Il file è un astrazione molto ampia nella descrizione di un sistema informatico: Il concetto di file è uno snodo fondamentale di flussi di informazione anche tra applicazioni diverse un file è una

Dettagli

Fondamenti di Informatica T. Linguaggio C: File

Fondamenti di Informatica T. Linguaggio C: File Linguaggio C: File I File Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa, che consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centrale.

Dettagli

Capitolo 11 Elaborazione di file

Capitolo 11 Elaborazione di file 1 Capitolo 11 Elaborazione di file 11.1 Introduzione 2 I file Possono essere creati, modificati, ed elaborati da programmi scritti in C Sono utilizzati per la memorizzazione permanente dei dati La memorizzazione

Dettagli

Formattazione avanzata. I/O Avanzato e File. Formattazione dell output. Formattazione avanzata. Forma completa degli specificatori

Formattazione avanzata. I/O Avanzato e File. Formattazione dell output. Formattazione avanzata. Forma completa degli specificatori Formattazione avanzata Modificatori di o in output Modificatori di o in input Stream predefiniti I/O Avanzato e File 2 Formattazione dell output Formattazione avanzata L output (su schermo o su file) viene

Dettagli

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

Introduzione al C. Unità 9 File. D. Bloisi, S. Peluso, A. Pennisi, S. Salza Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 9 File D. Bloisi, S. Peluso, A. Pennisi, S. Salza Sommario Input/Output Stream

Dettagli

Input/Output di numeri

Input/Output di numeri Input/Output di numeri I/O di numeri Per utilizzare le funzioni di I/O occorre include il file di intestazione (o file header) stdio.h utilizzando all inizio del sorgente la direttiva #include

Dettagli

Gestione dei File in C

Gestione dei File in C Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte

Dettagli

DOTT. ING. LEONARDO RIGUTINI DIPARTIMENTO INGEGNERIA DELL INFORMAZIONE UNIVERSITÀ DI SIENA VIA ROMA 56 53100 SIENA UFF. 0577234850-7102 RIGUTINI@DII

DOTT. ING. LEONARDO RIGUTINI DIPARTIMENTO INGEGNERIA DELL INFORMAZIONE UNIVERSITÀ DI SIENA VIA ROMA 56 53100 SIENA UFF. 0577234850-7102 RIGUTINI@DII Gestione dei files DOTT. ING. LEONARDO RIGUTINI DIPARTIMENTO INGEGNERIA DELL INFORMAZIONE UNIVERSITÀ DI SIENA VIA ROMA 56 53100 SIENA UFF. 0577234850-7102 RIGUTINI@DII.UNISI.IT HTTP://WWW.DII.UNISI.IT/~RIGUTINI/

Dettagli

per leggere caratteri: getchar(void); Laboratorio di linguaggi

per leggere caratteri: getchar(void); Laboratorio di linguaggi Lettura e scrittura di caratteri per leggere caratteri: getchar(void); Laboratorio di linguaggi per scrivere caratteri: putchar(int); Le molte volte l input viene bufferizzato fino al tasto ENTER 1 2 Lettura

Dettagli

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

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura

Dettagli

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

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione. I file L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione. I canali, sono delle strutture dati che contengono informazioni sul dispositivo fisico,

Dettagli

Input/output in C e in C++

Input/output in C e in C++ FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Input/output in C e in C++ 2001 Pier Luca Montessoro - Davide Pierattoni

Dettagli

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

Indice. La gestione dei file in C e gli stream. Apertura e chiusura di un file. Operazioni sui file. Accesso sequenziale e non sequenziale File in C Indice La gestione dei file in C e gli stream Apertura e chiusura di un file Operazioni sui file Accesso sequenziale e non sequenziale Gestione dei file in C In C all interno della standard library

Dettagli

Funzioni di I/O per numeri. Input e output di valori numerici. Input formattato scanf. Stream preesistenti

Funzioni di I/O per numeri. Input e output di valori numerici. Input formattato scanf. Stream preesistenti Funzioni di I/O per numeri 2 Input e output di valori numerici Ver. 2.4.2 2012 - Claudio Fornaro - Corso di programmazione in C Per utilizzare le funzioni di Input/Output bisogna includere il file di intestazione

Dettagli

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

I File. Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa. I File Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa. Consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centrale. Generalmente un

Dettagli

Capitolo 5 -- Stevens

Capitolo 5 -- Stevens Libreria standard di I/O Capitolo 5 -- Stevens Libreria standard di I/O rientra nello standard ANSI C perché è stata implementata su molti sistemi operativi oltre che su UNIX le sue funzioni individuano

Dettagli

Esercizio 1. Esercizio 1 - Soluzione

Esercizio 1. Esercizio 1 - Soluzione Esercizio 1 Realizzare un programma che, aperto un file di testo di nome Prova.txt in modalità scrittura, provveda a leggere da input delle parole separate da spazi (stringhe di al più 63 caratteri) e

Dettagli

Variabili e Istruzioni

Variabili e Istruzioni Exit Menù Variabili e Istruzioni 1 Le Variabili Una VARIABILE è un oggetto identificato da un NOME e da uno STATO, detto CONTENUTO o VALORE. Possiamo immaginarla come una scatola contenuto Pippo 11 nome

Dettagli

File e puntatori a file

File e puntatori a file File e puntatori a file Vitoantonio Bevilacqua vitoantonio.bevilacqua@poliba.it La libreria stdio.h mette a disposizione delle funzioni che hanno la peculiarità di trattare con questa nuova tipologia di

Dettagli

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

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 13/03/07 Nota Questi lucidi sono tratti

Dettagli

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

Sommario FONDAMENTI DI INFORMATICA 1. Il tipo FILE. Passaggio da standard I/O. LINGUAGGIO C Gestione dei file Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica, Elettrica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011

Dettagli

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

I File. Consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centarle. I File Il file e l unita logica di memorizzazione dei dati su memoria di massa. Consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centarle. Generalmente un file

Dettagli

I/O INTERATTIVO. scanf: quello che è indispensabile sapere printf: quello che è utile sapere

I/O INTERATTIVO. scanf: quello che è indispensabile sapere printf: quello che è utile sapere I/O INTERATTIVO scanf: quello che è indispensabile sapere printf: quello che è utile sapere Input da tastiera Funzioni disponibili (tra le altre): scanf getchar Schema di funzionamento Tastiera Sistema

Dettagli

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

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura

Dettagli

Gestione dei File. Indice. Il file system in C. Principali operazioni sui file (dalla Standard Library) Esempi. Corso di Informatica A.

Gestione dei File. Indice. Il file system in C. Principali operazioni sui file (dalla Standard Library) Esempi. Corso di Informatica A. Gestione dei File Corso di Informatica A Vito Perrone 1 Il file system in C Indice Principali operazioni sui file (dalla Standard Library) Esempi 2 Il file system in C Flusso di comunicazione: binario

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Cosa sono i file? Un file è un archivio di dati che puo essere registrato su un supporto di massa (testo, lettera, programma, archivio di dati, ecc.) Fondamenti di Informatica 12. Linguaggio C - Gestione

Dettagli

GESTIONE DEI FILE IN C

GESTIONE DEI FILE IN C GESTIONE DEI FILE IN C Il concetto di file.. è una parte logicamente contigua del contenuto di un dispositivo! Deve essere capace di memorizzare grandi quantità di dati! I dati memorizzati devono sopravvivere

Dettagli

Lab 10 Gestione file di testo

Lab 10 Gestione file di testo Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 10 Gestione file di testo Lab15 1 Esercizio 1 n Realizzare un programma che, aperto un file di testo di nome

Dettagli

Stringhe e allocazione dinamica della memoria

Stringhe e allocazione dinamica della memoria Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per

Dettagli

Gestione dei file. File di testo e binari

Gestione dei file. File di testo e binari Gestione dei file Un file e definito come un oggetto, presente nel file system, costituito da una sequenza continua di bytes Un file, per poter essere utilizzato, deve essere aperto Successivamente e possibile

Dettagli

FILE BINARI. 8QILOHELQDULRqXQDVHTXHQ]DGLE\WH

FILE BINARI. 8QILOHELQDULRqXQDVHTXHQ]DGLE\WH FILE BINARI 8QILOHELQDULRqXQDSXUDVHTXHQ]DGLE\WH VHQ]DDOFXQDVWUXWWXUD]LRQHSDUWLFRODUH ÊXQDVWUD]LRQHGLPHPRUL]]D]LRQHDVVROX WDPHQWHJHQHUDOHXVDELOHSHUPHPRUL]]D UHVXILOHLQIRUPD]LRQLGLTXDOVLDVLQDWXUD IRWRJUDILHGHOODPHPRULD

Dettagli

Gestione dei File C. Generalità

Gestione dei File C. Generalità Gestione dei File C 1 Generalità Il linguaggio C non contiene alcuna istruzione di Input/Output. Tali operazioni vengono svolte mediante chiamate a funzioni definite nella libreria standard contenute nel

Dettagli

I CARATTERI E LE STRINGHE

I CARATTERI E LE STRINGHE I CARATTERI E LE STRINGHE IL CODICE ASCII Per memorizzare i simboli grafici corrispondenti ai caratteri bisogna associare un numero intero a ciascuno di essi Il codice ASCII / æski/ (American Standard

Dettagli

Matrici, stringhe e I/O da file

Matrici, stringhe e 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

Dettagli

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

I File. File. File di testo. Esempi di file di testo. Gestione di file in C. Gestione di file in C mylib.obj mylib.c #include mylib.h int leggi(int a[], int dim) { int i=0; while( scanf("%d", a+i) ) { i++; if( i>=dim ) break; return i; void scambia(int *a, int *b) { int t; t = *a; *a = *b; *b = t; mylib.h

Dettagli

Introduzione a. Funzioni di Ingresso e Uscita. Compilazione

Introduzione a. Funzioni di Ingresso e Uscita. Compilazione Introduzione a Funzioni di Ingresso e Uscita Compilazione 2 Come si termina...... un programma in esecuzione (processo)? Ctrl + C In UNIX ci si basa sul concetto di terminale Anche da GUI, quello che si

Dettagli

LP1 Lezione 13: i File in C. Maurizio Tucci

LP1 Lezione 13: i File in C. Maurizio Tucci LP1 Lezione 13: i File in C Maurizio Tucci mtucci@unisa.it 1 Il File: Dichiarazione Memorizzare dati in maniera non volatile In C (libreria ) è definito un tipo FILE che astrae il concetto di sequenza

Dettagli

Sono file di caratteri, organizzati in linee. Ogni linea e` terminata da una marca di fine linea (newline, cara ttere '\n').

Sono file di caratteri, organizzati in linee. Ogni linea e` terminata da una marca di fine linea (newline, cara ttere '\n'). I File Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa. Consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centrale. Generalmente un

Dettagli

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p

Dettagli

int ninv; /* numero di inventario */

int ninv; /* numero di inventario */ 1) Scrivere il programma C che legga da un file di testo ("dati.dat") i record con dati relativi ad un archivio di dischi (utilizzando la struttura data) e scriva il file dati1.dat con i nomi degli artisti

Dettagli

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

Sulla libreria standard, III. Manipolare file con stdio.h Sulla libreria standard, III Manipolare file con stdio.h 1 Libreria per input/output Con libreria si intende una collezione di sottoprogrammi che vengono utilizzati per lo sviluppo di software non eseguibili,

Dettagli

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2

Dettagli

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA. INFORMATICA B Ingegneria Elettrica. I file in Matlab

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA. INFORMATICA B Ingegneria Elettrica. I file in Matlab INFORMATICA B Ingegneria Elettrica I file in Matlab I file I file sono contenitori di informazione: sequenze di byte associate ad un nome Sono memorizzati su memoria di massa (non- volatile) Possono continuare

Dettagli

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Compendio sottoinsieme del C++ a comune col C (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Librerie 1/2 Il solo insieme di istruzioni di un linguaggio di programmazione

Dettagli

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

Il linguaggio C I file. mylib.h contribuenti.txt. #include <stdio.h> #define N 25 Paolucci,Enrico, 24000,23.0. fornitori.dat Il linguaggio C I file mylib.c #include mylib.h int leggi(int a[], int dim) { int i=0; while( scanf("%d", a+i) ) { i++; if( i>=dim ) break; return i; void scambia(int *a, int *b) { int t; t = *a; *a =

Dettagli

Strutture Dati Dinamiche

Strutture Dati Dinamiche Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori

Dettagli

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili

Dettagli

Corso di Laurea in Ingegneria Meccanica A-K. Fondamenti di Informatica A. A Gestione dei File. A.Pinto

Corso di Laurea in Ingegneria Meccanica A-K. Fondamenti di Informatica A. A Gestione dei File. A.Pinto Corso di Laurea in Ingegneria Meccanica A-K Fondamenti di Informatica A. A. 2011-2012 1 Memorizzazione dei dati su dispositivi di memoria esterna Dispositivi di memorizzazione secondaria sono: dischi,

Dettagli

Laboratorio di Sistemi Operativi primavera 2009

Laboratorio di Sistemi Operativi primavera 2009 primavera 2009 Libreria standard di I/O Libreria standard di I/O rientra nello standard ANSI C perché è stata implementata su molti sistemi operativi oltre che su UNIX le sue funzioni individuano il file

Dettagli

Esercizio 1 (15 punti)

Esercizio 1 (15 punti) Esercizio 1 (15 punti) Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 16 giugno 2017 Il noto gioco MasterMind

Dettagli

snapshot della memoria rappresentazioni interne binarie di numeri immagini, audio, musica, volendo, anche caratteri

snapshot della memoria rappresentazioni interne binarie di numeri immagini, audio, musica, volendo, anche caratteri FILE BINARI Un file binario è una pura sequenza di byte, senza alcuna strutturazione particolare Èun'astrazione di memorizzazione assolutamente generale, usabile per memorizza- re su file informazioni

Dettagli

Sommario. Manipolazione sequenziale di file in C Funzioni di base per I/O di file

Sommario. Manipolazione sequenziale di file in C Funzioni di base per I/O di file File Input/Output 1 Sommario Manipolazione sequenziale di file in C Funzioni di base per I/O di file 2 Manipolazione di file I file devono essere aperti prima dell uso Associa un puntatore a file a ogni

Dettagli

Esercizi File Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Esercizi File Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Si ringrazia Raffaele Nicolussi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 16 ottobre 2007 1 Rappresentazioni di caratteri in C In C un carattere è una costante intera il cui valore è dato dal codice ASCII

Dettagli

Lettura da tastiera e scrittura su monitor

Lettura da tastiera e scrittura su monitor Lettura da tastiera e scrittura su monitor Per poter leggere UN SINGOLO CARATTERE dalla tastiera e visualizzare UN SINGOLO CARATTERE sul monitor si possono utilizzare le funzioni: int getchar (void) (per

Dettagli

MATLAB: FILES. Informatica B/C - A.A. 2013/2014

MATLAB: FILES. Informatica B/C - A.A. 2013/2014 MATLAB: FILES Informatica B/C - A.A. 2013/2014 I FILE Contenitori di informazione: sequenze di byte associate ad un nome Sono memorizzati su memoria di massa (non-volatile) Possono continuare ad esistere

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

Dettagli