Le operazioni sui file

Quando un’applicazione accede ad un file di archivio, generalmente lo fa per eseguire delle operazioni di scrittura o di lettura di dati. Si fa osservare che un accesso ad un file in SCRITTURA corrisponde ad un’operazione di Output.  Si ricorda, infatti, che la scrittura avviene su una memoria secondaria che è una periferica. Per la stessa ragione, un accesso ad un file in LETTURA corrisponde ad un’operazione di Input. Il problema dell’accesso ai file da parte di un’applicazione, abbiamo visto (link all’articolo) è possibile analizzarlo da due prospettive diverse, il LIVELLO FISICO, le cui operazioni sono affidate al Sistema Operativo, e il LIVELLO LOGICO, che è quello in cui operano le applicazioni. Mantenendo questo schema, le operazioni sui file possono essere distinte in operazioni fisiche e in operazioni logiche.

operazioni-file

Le operazioni fisiche

Le operazioni fisiche sono:

  • la creazione di un file;
  • l’apertura di un file;
  • gli accessi di I/O al file o, equivalentemente gli accessi in LETTURA/SCRITTURA nel file;
  • il posizionamento all’interno del file;
  • la chiusura del file.

Queste operazioni sono comandate a livello applicativo, ma vengono materialmente realizzate dal File System al quale le applicazioni possono richiedere di eseguirle secondo le modalità già descritte in un altro articolo (link articolo).

La creazione di un file su una memoria secondaria generalmente avviene in corrispondenza di un comando di apertura in scrittura di un file che ancora non esiste: quando il File System tenta di aprire in scrittura un file che ancora non esiste, allora prima lo crea. Particolare attenzione, invece, deve essere posta in corrispondenza di un comando di apertura in lettura, perché in questo caso se il file non esiste o per qualche motivo non è disponibile, viene generato un errore di run-time. Un errore di run-time è un errore che non può essere rilevato dal compilatore durante la fase di compilazione e che si può manifestare solo durante la fase di esecuzione del programma al verificarsi di particolari situazioni non prevedibili a priori. Si tratta di errori pericolosi perché, se non gestiti dall’applicazione, possono essere per essa fatali potendo determinare un’interruzione inaspettata del programma (crash dell’applicazione).

Prima di poter effettuare una qualunque operazione su un file, esso deve essere aperto. Con l’operazione di apertura, come già spiegato più nel dettaglio in un altro articolo (link articolo), il File System predispone per quel file un buffer nella memoria centrale, che viene utilizzato per tutti i trasferimenti dei record fisici di quel file. Con l’apertura di un file, il Sistema Operativo inizializza anche un PUNTATORE, che è un riferimento interno al file, che serve per fissare quale è la posizione nel file in cui viene effettuata la successiva operazione di lettura o scrittura di un record logico, se ne frattempo l’applicazione non comanda un riposizionamento del puntatore. Come questo puntatore viene inizializzato dal File System all’apertura del file e il modo in cui esso può essere gestito dopo l’apertura, ossia quali sono le richieste di posizionamento ammissibili all’interno del file, dipendono dall’organizzazione logica del file e dalla modalità di accesso al file disponibile. Alcuni tipi di file permettono al programmatore di posizionare il puntatore in una posizione a piacere all’interno del file, altri invece no. Per questo motivo quando un file viene aperto, il programmatore deve sempre specificare la modalità di accesso in cui aprirlo (questi concetti vengono ripresi e chiariti in un altro articolo: link articolo).

Con l’operazione di chiusura di un file, infine, il File System salva nella memoria secondaria il record fisico contenuto nel buffer di memoria dedicato a quel file e dealloca il buffer liberando spazio nella memoria centrale.

Le operazioni logiche

Le operazioni logiche, invece, sono tutte quelle operazioni tipiche della gestione di un archivio di dati e le principali sono:

  • l’inserimento di un nuovo record;
  • la cancellazione di un record;
  • l’aggiornamento (o modifica) dei campi di un record presente nell’archivio;
  • l’ordinamento dei record dell’archivio rispetto al valore di un campo o di un insieme di campi, secondo un certo criterio;
  • la ricerca di uno o più record che soddisfano un certo criterio di ricerca su un campo o più campi.

E’ importante sottolineare che al contrario delle operazioni fisiche, le operazioni logiche sono gestite a LIVELLO APPLICATIVO e, quindi, la logica procedurale di gestione deve essere scritta con istruzioni presenti nell’applicazione che le gestisce.

Le caratteristiche fondamentali delle operazioni logiche sono che si tratta di operazioni complesse, che in generale possono coinvolgere più operazioni fisiche di scrittura e/o lettura nel file e di posizionamento, e che la logica procedurale con cui possono essere realizzate dipende dalle modalità di accesso che i file mettono a disposizione e dall’organizzazione logica dell’archivio. Questi concetti vengono ripresi e affrontati con alcuni esempi di diverse organizzazioni logiche nell’articolo raggiungibile a questo link.