Capitolo 6 – Il File System
Dischi, file system e input/output
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Disco magnetico
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Il File System
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Il File System
Il file system e` quella parte del Sistema Operativo che fornisce
i meccanismi necessari per l’accesso e l’archiviazione delle
informazioni in memoria secondaria.
Realizza i concetti astratti:
✓ di file (archivio): unità logica di memorizzazione
✓ di directory (cartella): insieme di file (e cartelle)
✓ di partizione: dispositivo virtuale, corrispondente a una porzione di un
dispositivo
Le caratteristiche di file, directory e partizione sono del tutto indipendenti dalla natura e
dal tipo di dispositivo utilizzato.
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
6.1 Organizzazione del File System
La struttura di un file system può, in generale, essere rappresentata da
un insieme di componenti organizzate in vari livelli:
Applicazioni
•
Struttura logica
•
Accesso
•
Organizzazione fisica
•
Dispositivo virtuale
Hardware: memoria secondaria
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Struttura Logica: Il File
Il file è un insieme di informazioni, rappresentate mediante insieme di record
logici (bit, byte, linee, record, etc.)
Ogni file è caratterizzato da un insieme di attributi
ad esempio:
• tipo: stabilisce l’appartenenza a una classe (eseguibili, batch, testo, etc)
• dimensione: numero di byte contenuti nel file
• indirizzo: puntatore/i al record logico corrente (lettura/scrittura)
• data e ora (di creazione e/o di modifica)
in S.O. multiutenti anche:
• utente proprietario
• diritti di accesso al file per il proprietario e gli altri utenti
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Struttura Logica: La cartella (directory)
E` un’astrazione che raggruppa logicamente più file :
▪ una cartella può contenere più file
▪ può contenere a sua volta altre cartelle
➔ La struttura logica del file system è un’aggregazione di
file e cartelle, la cui struttura è definita dalle cartelle
stesse
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
File System: struttura logica ad albero
•
Cartella radice
dev ker
sys
user
Mario
Paolo
•
• •
prog dati
• •
sor
•
•
Emma
dati
•
txt
bin
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
File System: struttura logica a grafo aciclico
•
Cartella radice
dev ker
sys
user
Mario
Paolo
•
• •
•
Emma
prog dati
• •
sor
•
Dati di Mario
•
txt1 txt2
• •
bin
f
--> Collegamento di file
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Gestione del File System
(operazioni sulle cartelle)
Operazioni fondamentali per la gestione del file system:
• Creazione e cancellazione di cartelle
modificano la struttura logica del file system
• Listing: ispezione del contenuto di uno (o più) cartelle
• Attraversamento della cartella: navigazione attraverso la
struttura logica del file system
• Creazione/cancellazione di file
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Accesso al file system
Strutture dati: rappresentazione del file
• ogni file è rappresentato concretamente dal descrittore di
file, che memorizza gli attributi
Unix: i-node
• i descrittori di file devono essere memorizzati in modo
persistente, mediante apposite strutture in memoria
secondaria
Unix: i-list
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
6.3.1 Strutture dati
Cartelle
•
•
Ogni file (eventualmente una cartella) appartiene a una cartella;
Ogni cartella collega i nomi dei file in essa contenuti ai rispettivi attributi
Possibile realizzazione:
▪ La cartella è una struttura dati di tipo tabellare che associa ai nomi dei file
la lista dei rispettivi attributi, incorporando i descrittori di file :
mario
nome
•
prog.c
prog.exe
prog.c
Attributi: tipo, indirizzi, ecc.
prog.exe
Attributi: tipo, indirizzi, ecc.
•
dati
descrittore
dati
Attributi: tipo, indirizzi, ecc.
Realizzazione della cartella mario
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
In alternativa (Unix):
▪ la cartella è una tabella che contiene i riferimenti ai descrittori dei
file (memorizzati in una struttura separata)
•
mario
Attributi di prog.c
nome
•
•
prog.c
•prog.exe
Attributi di dati
prog.c
prog.exe
dati
dati
Realizzazione della
cartella mario
•
•
Attributi di prog.exe
Tabella dei descrittori
di file
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Alternative per l’implementazione delle cartelle
(a) Una semplice directory
▪ elementi di ampiezza fissa
▪ contiene sia attributi, sia indirizzi su disco
(b) Una directory che contiene i puntatori alle strutture dati che contengono
gli attributi (descrittori di file)
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Accesso a file
Compito del S.O. è consentire l’accesso on-line ai file.
Operazioni di accesso:
• Lettura di record logici dal file.
• Scrittura aggiunta di record logici al file.
Per eseguire un’operazione è necessario reperire gli attributi del file:
gli indirizzi dei record logici a cui accedere
Diritti di accesso
……..
➔ costo elevato se, per ogni operazione, gli attributi vengono ricercati nella
copia permanente del descrittore di file
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Accesso a file
Per migliorare l’efficienza:
▪ il S.O. mantiene in memoria una struttura che registra i file
attualmente in uso (file aperti):
• per ogni file aperto: copia del descrittore di file
==> posizione su disco, altri attributi
Operazioni necessarie:
▪ apertura: introduzione di un nuovo elemento nella tabella dei file
aperti
▪ chiusura: salvataggio del descrittore e dei buffer in memoria
secondaria e eliminazione dell’elemento corrispondente dalla tabella
dei file aperti.
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Metodi di accesso
L’accesso a file può avvenire secondo varie modalità:
▪ accesso sequenziale
▪ accesso diretto
▪ accesso a indice
Il metodo di accesso è indipendente:
• dal tipo di dispositivo utilizzato
• dalla tecnica di allocazione dei blocchi in memoria
secondaria.
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Accesso sequenziale
Il file è una sequenza [R1, R2,.. RN] di record logici:
▪ per accedere ad un particolare record logico Ri , è necessario
accedere prima agli (i-1) record che lo precedono nella sequenza:
•R1 R2
Ri-1 •Ri
▪ Operazioni di accesso:
✓ readnext: lettura del prossimo record logico della sequenza
✓ writenext: scrittura del prossimo record logico
➢ ogni operazione di accesso (lettura/scrittura) posiziona il puntatore
sull'elemento successivo a quello letto/scritto.
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Accesso diretto
Il file è un insieme non ordinato {R1, R2,.. RN} di record logici:
▪ si può accedere direttamente ad un particolare record
logico.
▪ Operazioni di accesso:
✓ read(f, i, &V): lettura del record logico i del file f ; il valore
letto viene assegnato alla variabile V;
✓ write(f, i, &V): scrittura del valore della variabile V nel
record logico i del file f .
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Protezione
Le politiche di protezione delle risorse (file e direttori) possono
essere specificate mediante una matrice di protezione:
DOMINIO
Utente Mario
Utente Paola
Utente Elena
File 1
r, w, -
File 2
r, -, r, w, -
File 3
File 4
Dir 1
r, -, -
r, w, x
r, w, x
r, -, -
Dir 2
r, w, -
Stamp
- w, -
r, w, -
- w, -
• Ogni riga corrisponde a un dominio di protezione
• Ogni colonna rappresenta una risorsa del sistema
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Lista di controllo degli accessi
La Lista di Controllo degli Accessi (LCA) associata alla file F
elenca i diritti di accesso sulla file attribuiti a ogni dominio
(utente)
▪ rappresenta una colonna della matrice di protezione
DOMINIO
Utente Mario
Utente Paola
Utente Elena
File 1
r, w, -
File 2
r, -, r, w, -
File 3
File 4
Dir 1
r, -, -
r, w, x
r, w, x
r, -, -
Dir 2
r, w, -
Stamp
- w, -
r, w, -
- w, -
▪ Ad esempio, la lista di controllo degli accessi associata a File4
è
File4 --> Paola: (r, w, x) --> Elena: (r, -, -)
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Organizzazione fisica del File System
Ogni dispositivo di memoria secondaria è organizzato in
blocchi (o record fisici):
Blocco: unità di trasferimento nelle operazioni di I/O da/
• verso il dispositivo; la sua dimensione è costante.
Ma: i processi vedono ogni file come un insieme di record
logici:
Record logico: unità logica di trasferimento specificata nelle
•
operazioni accesso al file.
In C un record logico è il singolo byte di un file.
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
6.4.1 Blocchi & record logici
Uno dei compiti del file system è stabilire una corrispondenza
tra record logici e blocchi fisici.
Di solito:
Dimensione(blocco) >> Dimensione(record logico)
➔ ogni blocco fisico può contenere più record logici.
blocco
Record
logici
•
•
•
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Metodi di Allocazione dei file
Ogni blocco fisico contiene un insieme di record logici contigui.
==> record logici raggruppati in blocchi logici, ciascuno di dimensione uguale
a quella del blocco fisico
==> allocazione dei blocchi fisici: assegna un blocco fisico a ciascun blocco
logico
Principali metodi di allocazione dei blocchi fisici
▪ allocazione contigua
▪ allocazione a lista
▪ allocazione a indice
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Allocazione contigua
Ogni file occupa un insieme di blocchi fisici
fisicamente contigui.
Vantaggi:
✓ Efficienza dell’accesso sequenziale
✓ Facilità della ricerca di un blocco e dell’accesso diretto
Svantaggi:
✓ Frammentazione esterna:
man mano che si riempie il disco, le regioni contigue libere
sono sempre più piccole e possono risultare inutilizzabili per
l’allocazione dei nuovi file
•
•
•
• f0
•
•
f3
•
•
• • • •
f2 f2 f2 f0
• • • •
f0
• • • •
f3 f3 f3 f3
• • • •
• • • f1•
f1 f1
• • • •
✓ Complessità dell’allocazione
✓ Ostacoli all’espansione dei file
✓ si può ovviare con la compattazione (deframmentazione) del
disco
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Allocazione a lista concatenata (1)
I blocchi fisici sui quali viene mappato ogni file
sono organizzati in una lista concatenata, con
puntatori interni ai blocchi medesimi
Vantaggi:
✓ non c’è frammentazione esterna
✓ Allocazione facile
Svantaggi:
✓ costo della ricerca di un blocco
✓ accesso diretto inefficiente
✓ possibilità di perdere blocchi se un link viene
danneggiato
✓ maggior occupazione (spazio occupato dai
puntatori)
inizio
232
f2
•
Cartella o Descrittore di File
•
•
•
• ••
•
•
f2 •• f2 ••
•
•
• • • •
• • • •
•
•
f2
• • • • •
• • •
• • f2
blocco 232
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Allocazione a lista concatenata (2)
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Allocazione con File Allocation Table (FAT)
E’ una evoluzione dell’allocazione con lista concatenata
• I puntatori che collegano i blocchi fisici sono memorizzati
come elementi di una tabella (File Allocation Table), separata
dai blocchi
• A ogni blocco fisico corrisponde un elemento della FAT
•
•
•
•
•
•
•
•
•
• La FAT risiede permanentemente su disco, ma una copia di
lavoro è caricata in memoria
• Ricerca di un blocco: si deve percorrere una lista di elementi
della FAT, ma gli accessi avvengono in memoria invece che su
disco
==> accesso diretto efficiente
La FAT:
• Unica tabella che descrive tutti i file (aperti o no)
àgrande dimensione, superabile con il caricamento
dinamico (paginazione a domanda)
• Gli elementi che descrivono un file sono generalmente sparsi
ànell’accesso diretto (= ricerca di un record logico) sono
possibili molti errori di pagina
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Limitazioni dei file systems FAT
Massima dimensione del File System per diverse ampiezze dei blocchi
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Allocazione a indice
A ogni file sono associati uno o più blocchi
(blocchi indice o blocchi indiretti), ciascuno di
quale contiene indirizzi di blocchi fisici su cui è
allocato il file.
Cartella o Descrittore di File
•
assenza di frammentazione esterna
•
• ••
✓
✓
facilità di allocazione
facilità di accesso diretto
strutture dati separate per file diversi
con
possono essere caricate in memoria
limitata occupazione
Svantaggi:
✓
•f2
•
Vantaggi:
✓
✓
indice
124
•
• • • •
f2 • f2 •
•
•
• • • •
•• • • •
•
• • • •
f2
• • • • •
Frammentazione interna nei blocchi indice
Blocco indice n. 124
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Allocazione a indice (2)
Schema semplificato di Unix
- i-node utilizzato (parzialmente) come
blocco indice
- altri blocchi indice individuati dagli
indirizzi indiretti
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Il File System di UNIX
Omogeneità
• Astrazione dei dispositivi e dei pipe come file
Tre categorie di file:
▪ file ordinari
▪ cartelle
▪ file speciali (dispositivi, pipe)
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Il File System di Unix
Organizzazione logica: grafo aciclico
•
• bin
/
• etc
• usr
anna
.•profile • file1
•dev
paolo
•mbox
•testi
....
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Il File System di Unix: organizzazione fisica
• Informazione residente su disco
Boot Block
SuperBlock
I-List
•
Data Blocks
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Organizzazione fisica del disco nei sistemi UNIX
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
i-node
È il descrittore del file.
Tra gli attributi contenuti nell’i-node:
▪ tipo di file:
✓ ordinario
✓ directory
✓ file speciale
▪
▪
▪
▪
▪
▪
proprietario, gruppo (user-id, group-id)
Lunghezza del file
Data e tempo di creazione e modifica
12 bit di protezione
numero di links
13 - 15 indirizzi di blocchi ( a seconda della realizzazione)
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Indirizzamento dei blocchi tramite i-node e blocchi indiretti
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
La cartella
/usr/mario
• file1
• file2
•miodir
La cartella /usr/mario è un file che contiene:
•
file1
file2
miodir
.
..
189
133
121
121
••
i-node
110
89
i-list
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
7.6.4 Accesso a File: Concetti Generali
• assenza di strutturazione: file = sequenza di bytes
• accesso sequenziale a partire dalla posizione corrente
• posizione corrente: I/O Pointer
•
• eof
•
• vari modi di accesso (lettura, scrittura, lettura/scrittura, etc.)
accesso subordinato all’operazione di apertura
I/O
•
pointer
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Libreria stdio.h per l'accesso ai file in C
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
La libreria standard di I/O (stdio.h)
Consente di effettuare operazioni di lettura/scrittura su dispositivi
logici e fisici che possono essere:
• files
• linee seriali (rete, USB, …)
• periferiche in genere (quelle disponibili nella directory /dev del
file system unix)
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
La libreria standard di I/O (stdio.h)
Ogni programma C ha a disposizione tre file già aperti:
• stdin – Definisce il flusso di input dei dati.
• Tipicamente dalla tastiera
• puo' anche provenire da un file rediretto in input con il
carattere di redirezione <
• puo' provenire dall'output sullo stdout di un altro
programma e collegato in pipe con il carattere | (es: ls |
more)
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
La libreria standard di I/O (stdio.h)
• stdout – Definisce il flusso di output dei dati.
• Tipicamente sullo schermo del terminale
• puo' essere l'input di un altro programma collegato tramite
pipe |,
• oppure puo' essere rediretto su un file tramite > (sovrascrittura
dei dati) oppure >> (append dell'output)
• stderr – Definisce il flusso di output dei messaggi di errore.
• Puo' essere lo schermo del terminale, del PC, o della finestra di
dove sta' girando l'applicazione
• La funzione void perror(const char *str) permette
di stampare una stringa su stderr
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Libreria stdio.h per l'accesso ai file in C
Per utilizzare la libreria standard di I/O e' necessaria l’intestazione :
#include <stdio.h>
Permette al programma di accedere a file, mediante un insieme di
funzioni, tra le quali:
✓ apertura/creazione: fopen()
✓ chiusura: fclose()
✓ lettura: fread(), fgetc(), fscanf()
✓ scrittura: fwrite(), fputc(), fprintf()
✓ accesso diretto: fseek(), ftell()
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Apertura di File: fopen
•
FILE *fopen(const char* numefile, const char * mode);
▪ nomefile è il nome del file (relativo o assoluto)
▪ mode è un parametro che può essere:
• ʺrʺ per aprire il file in lettura (il puntatore è posizionato all’inizio del
file)
• ʺr+ʺ per aprire il file in lettura e scrittura (il puntatore è posizionato
all’inizio del file)
• ʺwʺ per aprire il file in scrittura(il puntatore è posizionato all’inizio
del file)
• ʺbʺ per aprire un file binario
▪ il valore restituito dalla fopen è il file descriptor associato al file, o -1 in
caso di errore.
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Chiusura di File: fclose
• int fclose(FILE *fd);
• fd è il file descriptor del file da chiudere.
▪ Restituisce l’esito della operazione (0 in caso di
successo, <0 in caso di insuccesso).
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Lettura e Scrittura di File
Caratteristiche:
▪ accesso mediante il file descriptor
▪ ogni operazione di accesso (lettura o scrittura) agisce
sequenzialmente sul file, a partire dalla posizione
corrente del file (I/O pointer)
▪ possibilità di alternare operazioni di lettura e scrittura
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Lettura di File: fread
Size_t fread(void *buf, size_t dim,
•
size_t n, FILE *fd);
• fd è il file descriptor del file
• buf è l’area in cui trasferire i byte letti
• n è il numero di elementi da leggere
• dim è la dimensione di ogni elemento da leggere (1 se si leggono
bytes, altrimenti sizeof(struct …)
▪ in caso di successo, restituisce un intero positivo (≤ n) che
rappresenta il numero di dati effettivamente letti
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Lettura di File: fgetc
int fgetc(FILE *fd);
•
• fd è il file descriptor del file
▪ Restituisce un carattere letto dal file.
▪ Se il file è finito (o vuoto) restituisce la costante EOF
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Lettura di File: fscanf
int fscanf(FILE *fd, const char *format,… );
•
• fd è il file descriptor del file
• format è il formato della stringa letta dal file
▪ Funziona come la scanf, ma legge l’input da file
▪ in caso di successo, restituisce il numero di valori letti oppure
EOF in caso di fallimento
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Scrittura di File: fwrite
size_t fwrite(void *buf, size_t dim,
•
size_t n, FILE * fd);
• fd è il file descriptor del file
• buf è l’area da cui trasferire i byte scritti
• n è il numero di elementi da scrivere
• dim è la dimensione di ogni elemento da scrivere (1 se
si scrivono bytes, altrimenti sizeof(struct …)
▪ in caso di successo, restituisce il numero di dati
effettivamente scritti
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Scrittura di File: fputc
int fputc(int c, FILE *fd);
•
• fd è il file descriptor del file
• c è il carattere da scrivere nel file nella posizione corrente
del file (esegue un cast a (unsigned char))
▪ Restituisce EOF in caso di errore
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Scrittura di File: fprintf
•int fprintf(FILE *fd, const char *format,…);
• fd è il file descriptor del file
• format è il formato della stringa da scrivere su file, come
per la printf
▪ in caso di successo, restituisce il numero di caratteri
effettivamente scritti
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Accesso diretto ai File: fseek
int
fseek(FILE *fd, long offset, int whence);
•
• fd è il file descriptor del file
• offset specifica di quanto spostare la posizione corrente al file
(può essere negativo)
• whence è:
✓ SEEK_SET: I/O pointer = offset
✓ SEEK_CUR: I/O pointer = I/O pointer + offset
✓ SEEK_END: I/O pointer = lunghezza del file - offset
▪ Restituisce -1 in caso di errore, 0 in caso di successo
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Accesso diretto ai File: ftell
long
ftell(FILE *fd);
•
• fd è il file descriptor del file
▪ Restituisce il valore della posizione corrente al file
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Esempio di lettura file con fread (I)
#include <stdio.h> /* including standard library */
struct CD_COLLECTION {
char album_name[42];
int year;
char artist[42];
};
int main (void)
{
FILE *fp = fopen ("collection.bin","rb");
struct CD_COLLECTION collection[5];
int i = 0;
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Esempio di lettura file con fread (II)
fread (collection, sizeof(struct CD_COLLECTION), 5,
fp);
for (i=0; i<5 ; i++) {
printf("Album Name: %s\nYear %i\nArtist:
%s\n\n",
collection[i].album_name,
collection[i].year,
collection[i].artist);
}
fclose (fp);
return 0;
}
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Esempio di scrittura file con fwrite (I)
#include <stdio.h> /* including standard library */
struct CD_COLLECTION {
char album_name[42];
int year;
char artist[42];
};
int main (void)
{
FILE *fp = fopen ("collection.bin","wb");
struct CD_COLLECTION collection;
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl
Capitolo 6 – Il File System
Esempio di scrittura file con fwrite (II)
collection.album_name, "Back to black");
collection.year=2006;
collection.artist,"Amy Winehouse";
fwrite (collection, sizeof(struct CD_COLLECTION),
1, fp);
fclose (fp);
return 0;
}
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari – Sistemi Operativi
Copyright © 2004 – The McGraw-Hill Companies srl