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