Specifiche Interne Modulo 2
[Modulo2]
Quando il file viene aperto, viene creato un file con lo stesso nome ma con estensione DBF_OPEN_EXT
. La verifica dell'esistenza di questo file garantisce che lo stesso DBF non puo' essere aperto piu' volte. Questo file deve essere immediatamente chiuso dopo la creazione, non contiene informazioni; viene cancellato alla chiusura di un DBF.
Dopo l'apertura del file, il puntatore di lettura/scrittra del file deve essere posizionato all'inizio del primo record, cioe' immediatamente dopo l'Header.
Quando un file viene aperto deve essere ritornato un handle. Dato che ci possono essere piu' database aperti contemporaneamente, deve essere mantenuto un vettore di handle validi; questo vettore potrà contenere tutte le informazioni che lo studente ritiene opportuno. E' da notare comunque che tali informazioni non saranno accessibili DIRETTAMENTE dagli altri moduli, ma solo attraverso le funzioni di interfaccia.
In generale comunque, e' possibile mantenere solo le informazioni dipendenti dalla connessione, cioe' il nome del file, il file pointer e il record corrente.
Il numero massimo di DBF che possono essere aperti e' MAX_DBF_OPEN
.
Ricordarsi di rimuovere la posizione allocata in caso di errore e alla chiusura del file.
La GetDBFInfo() deve leggere la parte fissa dell'header e decodificare le informazioni numeriche riportandole da Network a Host Byte Order. In aggiunta deve anche ritornare le informazioni dipendenti dalla connessione, che dovranno essere reperite attraverso l'handle.
Data la modularita' del compito, le informazioni su un DBF possono essere variate da altre funzioni di moduli successivi.
Ad esempio, il numero di record totali può essere variato dalla funzione insertBlankRecord() del Modulo 3; per essere sicuri che le informazioni siano corrette, la funzione GetDBFInfo() dovrà rileggerle tutte le volte. In particolare dovra' anche ricalcolare correttamente il Record corrente basandosi sulla posizione del puntatore nel file e facendo gli opportuni calcoli (utilizzando la funzione ftell()
e la lunghezza dell'header e di ogni record).
La funzione GetFieldInfo() deve posizionarsi alla fine della parte fissa dell'header e leggere le definizioni dei campi, decodificando opportunamente i valori.
In molte funzioni e' necessario leggere informazioni dal DBF, ad.es. nella GetDBFInfo() e GetFieldInfo().
In questi casi fare anche attenzione a riposizionare il puntatore di lettura/scrittura, per mantenere la coerenza con il record corrente. Per fare cio' e' possibile utilizzare le funzioni ftell()
e fseek()
oppure fgetpos()
e fsetpos()
.
Nella struttura DBF_INFO_t
è anche presente il puntatore al file aperto, necessario per i moduli futuri.
Questo è un file pointer e non un file descriptor, ma le operazioni su file possono essere effettuate utilizzando le funzioni di API (open()
, read()
, etc) oppure quelle di libreria C (fopen()
, etc.).
Il passaggio da file pointer a file descriptor è effettuabile, se necessario, tramite le funzioni fdopen()
e fileno()
.
Generated on Sun Apr 2 15:38:58 2006 for LPC - Modulo 2 by
1.4.6-NO