Anteprima
Vedrai una selezione di 20 pagine su 128
Appunti di Fondamenti di Informatica Pag. 1 Appunti di Fondamenti di Informatica Pag. 2
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 6
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 11
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 16
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 21
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 26
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 31
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 36
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 41
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 46
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 51
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 56
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 61
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 66
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 71
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 76
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 81
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 86
Anteprima di 20 pagg. su 128.
Scarica il documento per vederlo tutto.
Appunti di Fondamenti di Informatica Pag. 91
1 su 128
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

FILE

programma con i file gestiti dal sistema operativo

Esempio di dichiarazione di variabile di tipo FILE:

FILE *fp;

L’accesso a file: il tipo FILE

Il programma opera su un file tramite una struttura e le funzioni messe a disposizione

• FILE

dalla libreria standard

Tali funzioni usano variabili di tipo per identificare il file sul quale operare

• FILE

Un programma può aprire e usare più file contemporaneamente

Apertura e chiusura di file

Per poter utilizzare un file, questo deve venire aperto

• Aprire un file significa comunicare al sistema operativo che si intende accedere al contenuto

• del file

Si utilizza la funzione (File OPEN)

• fopen

Il file deve poi essere chiuso utilizzando la funzione (File CLOSE)

• fclose

Le funzioni di apertura e chiusura di file operano su variabili di tipo puntatore a

• FILE

La non fa altro che inizializzare la variabile di tipo associata al file aperto e

• fopen FILE

restituirne il puntatore

Esempio

Dichiaro la variabile che punta a una struttura necessaria per gestire lo stream

• fp

FILE *fp;

Associo lo stream al file di nome

• fp "pluto.txt"

fp=fopen("pluto.txt", "r");

Leggo una riga dallo stream

• fp

fgets(buf, BUFDIM, fp);

Chiudo lo stream

• fclose(fp);

Apertura e chiusura di file

Prototipo:

FILE *fopen(char *path, char *mode);

Accetta due parametri di tipo stringa (puntatore a carattere):

punta al nome del file da aprire (incluso il percorso)

• path specifica il modo con il quale aprire il file ecc.)

• mode (“w”, “r”,

Un file può essere aperto per diversi scopi: lettura, scrittura e append (scrittura alla fine del file)

La stringa mode può quindi valere:

(lettura): l'accesso al file avviene dal suo inizio

• "r" (lettura e scrittura): l'accesso al file avviene dal suo inizio. Il file deve esistere, altrimenti

• "r+"

dà errore.

(scrittura): se il file esiste, esso viene sovrascritto, altrimenti un nuovo file viene creato;

• "w"

l'accesso al file

avviene dal suo inizio

• (lettura e scrittura): se il file esiste, esso viene sovrascritto, altrimenti un nuovo file

• "w+"

vuoto viene creato; l'accesso al file avviene dal suo inizio;

(append): la scrittura avviene a partire dalla fine del file; se il file non esiste, esso viene

• "a"

creato;

(lettura e append): se il file non esiste, un nuovo file viene creato; l'accesso in lettura

• "a+"

avviene dall'inizio del file, mentre la scrittura è sempre effettuata alla fine del file

Modalità in aggiornamento

L’apertura di un file in modalità di aggiornamento permette la lettura e la scrittura dello stesso file

mediante lo stesso stream (fp)

La differenza tra e è solo nell’apertura:

"r+" "w+"

à se il file non esiste dà errore

• "r+" à se il file esiste già, lo ricrea vuoto

• "w+"

Apertura e chiusura di file

Per completezza, è anche possibile aggiungere il carattere alla fine o in mezzo a qualsiasi

• "b"

precedente di caratteri (es., ottenendo o

“wb” “ab+”)

Questo carattere indica esplicitamente che il file da aprire è binario

• Molti sistemi, infatti, trattano i file binari e i file di testo allo stesso modo; quindi, il fatto di

• specificare la risulta superfluo, ma altri sistemi operativi potrebbero operare delle

b

distinzioni, e quindi potrebbe essere necessario specificare esplicitamente il tipo di file

trattato

La funzione restituisce un puntatore di tipo correttamente inizializzato se

• fopen FILE

l'operazione ha avuto successo

Altrimenti ritorna

• NULL

Tipiche fonti di errore (che restituiscono

• NULL):

- Il tentativo di aprire in lettura un file che non esiste

- Aprire in scrittura un file read-only (es. i file su un CD-ROM)

- Aprire un file per il quale non si dispongono i necessari permessi di accesso

Il file deve essere chiuso utilizzando la funzione

• fclose

La chiusura del file serve per liberare (ovvero fare il flush) delle aree di memoria allocate dalle

• funzioni della libreria per memorizzare le informazioni lette e scritte sul file dichiarazione:

int fclose(FILE *fp);

Accetta come parametro il puntatore a che identifica il file da chiudere

• FILE

Ritorna 0 se la chiusura avviene con successo

• Ritorna (End Of File) in caso di errore

• EOF

Considerazione sull’efficienza

Tutte le operazioni di I/O relative ai file sono intrinsecamente e notevolmente più lente di

• quelle che usano solo la memoria, nonostante la presenza di buffer e cache

Conviene ridurre il più possibile l’accesso al file

• Quando è necessario utilizzare molte volte i dati contenuti in un file, conviene in genere

caricarne il contenuto in memoria in opportune strutture dati

Apertura e chiusura di file: esempio

FILE *fin, *fout;

if (!(fin = fopen("matrice.dat", "r"))) {

perror("matrice.dat");

exit(1);

}

if (!(fout = fopen("documenti/info.txt", "w"))) {

perror("documenti/info.txt");

exit(1); }

/* ... istruzioni di accesso al file ... */

fclose(fin);

fclose(fout);

I file di I/O standard

Nel file sono definite tre variabili di tipo

• stdio.h FILE *:

- -> standard input (tipicamente la tastiera)

stdin

- -> standard output (tipicamente il video)

stdout

- -> standard error (tipicamente il video)

stderr

sono gli stream standard

Vengono aperti automaticamente dal programma quando questo viene eseguito

La posizione all’interno del file

Ogni operazione di lettura o scrittura che interessa il file modifica la posizione corrente all'interno del

file Ad ogni lettura o scrittura la posizione corrente viene spostata in avanti e posta in

• corrispondenza al successivo byte da leggere o scrivere (accesso sequenziale)

Per esempio, quando viene letta una riga di testo fino al newline, la posizione nel file viene

• spostata al primo byte della riga successiva

Lettura/scrittura di singoli caratteri

Il file viene letto o scritto carattere per carattere

• I caratteri letti possono essere aggregati in strutture più articolate, come vettori e stringhe,

• oppure elaborati singolarmente

Le funzioni messe a disposizione dalla libreria standard per questo tipo di interazione

• (lettura/scrittura per carattere) con i file sono e

getc putc

La funzione getc e putc

prototipo:

int getc(FILE *stream);

int putc(int c, FILE *stream);

• getc legge un singolo carattere dal file stream

• putc scrive il carattere c sul file stream

• esempio: copy_char.c

Accesso a file di testo

Il C mette a disposizione varie funzioni per la lettura di dati da file di testo e l'interpretazione

• (parsing) del loro contenuto

La lettura e l'interpretazione dei dati avvengono in due fasi successive, per mezzo di funzioni

• diverse

La funzione di lettura consigliata è

• fgets

- Ad ogni chiamata, la funzione carica una linea di testo del file in una stringa

la stringa viene deve essere interpretata utilizzando funzioni come

• sscanf

Lettura per righe con e interpretazione con

fgets sscanf

Spesso un file è formato da righe di testo che hanno una struttura nota

• Per struttura di una riga si intende il formato del suo contenuto, ovvero i campi che la

• compongono

Esempio: ogni riga di un file potrebbe essere composta da numeri interi separati da virgola

• In questo caso è possibile utilizzare lo schema di lettura basato su e di parsing basato

• fgets

su sscanf

è dichiarata come segue:

• fgets

char *fgets(char *s, int size, FILE

*stream);

- è il puntatore alla stringa letta;

s

- è il numero massimo di caratteri da restituire;

size

- è il file dal quale leggere la stringa

stream

- il valore di ritorno è il puntatore alla stringa stessa

è dichiarata come segue:

• sscanf int sscanf(const char *str, const char *format, ...);

- Il parsing effettuato da è identico a quello della

sscanf scanf

- Invece di fare il parsing da viene analizzata la stringa (primo parametro della

stdin str

funzione)

while(fgets(buf, sizeof(buf), fin)!=NULL){

sscanf(buf, ....);

}

Accesso a file di testo

Un altro approccio per la lettura usa

• fscanf

- presenta una serie di controindicazioni

Uno dei problemi è che non è possibile separare la lettura della stringa dall'interpretazione del

• contenuto

Attenzione:

Una volta aperto un file in lettura, non mescolare l'uso di e per la lettura di dati dallo

fgets fscanf

stesso file

Lettura mediante fscanf

Con file di testo da leggere di struttura nota è possibile usare la funzione fscanf

Si comporta come la già illustrata per la lettura da standard

• scanf

input

È possibile specificare da quale file leggere (primo parametro della funzione)

• Si può indicare anche il file standard in questo caso il comportamento è identico a

• stdin;

quello di scanf

Lettura e scrittura mediante fscanf e fprintf

Definizione di

• fscanf:

int fscanf(FILE *stream, const char *format, ...);

Definizione di

• fprintf:

int fprintf(FILE *stream, const char *format, ...);

Scrittura mediante fprintf

Le due funzioni seguenti sono del tutto equivalenti:

printf("%s %d\n", nome, anni);

fprintf(stdout, "%s %d\n", nome, anni);

Effettuano entrambe la scrittura sullo standard output di una stringa, seguita da un valore numerico

intero decimale

Uso di feof

Spesso si usa (File EOF) per verificare la terminazione del file in abbinamento a

• feof fscanf

ritorna un valore diverso da zero se è stata tentata una lettura oltre la fine del file di input

• feof

da parte di fscanf

Purtroppo, capita sovente che la venga utilizzata in modo errato

• feof

Modalità di funzionamento di feof

La non controlla esplicitamente il raggiungimento della fine del file

• feof

Restituisce il valore vero se si è già tentata una lettura oltre la fine del file

• Non è possibile sapere se si è letto l'ultimo valore in un file fintanto che non si tenta di

• effettuare una operazione di lettura oltre la fine del file stesso (con qualunq

Dettagli
Publisher
A.A. 2023-2024
128 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Yasm23 di informazioni apprese con la frequenza delle lezioni di Fondamenti di informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Pavia o del prof Larizza Cristiana.