Specifiche Interne Modulo 1
[Modulo1]
Il nome di un DBF deve contenere solo caratteri alfanumerici piu' eventualmente il carattere '_' e deve iniziare con un carattere. Il nome viene troncato alla lunghezza DBF_NAME_LENGTH
e poi viene aggiunta l'estensione DBF_EXTENSION
.
L'header di un DBF viene scritto dalla funzione CreateDatabaseFile() ed è così fatto:
- DBF_NAME_LENGTH+1
- Nome del database + NULL. Se il nome è più corto si riempie di NULL.
- 2 bytes
- Numero di campi. Short in Network Byte Order.
- 4 bytes
- Numero di record. Long in Network Byte Order
- 2 bytes
- Lunghezza totale Header. Short in Network Byte Order.
- 2 bytes
- Lunghezza di ogni record. Short in Network Byte Order.
- 4 bytes
- timestamp ultimo update. Long in Network Byte Order che rappresenta il time in Julian Date.
- <DEFINIZIONE CAMPO 1>
- Definizione del primo campo del DBF. (vedi dopo)
- ...
- <DEFINIZIONE CAMPO n>
- Definizione dell'ultimo campo del DBF. (vedi dopo)
- 2 bytes
Ogni definizione di campo ha la seguente struttura:
- FIELD_NAME_LENGTH+1
- Nome del campo + NULL. Se il nome è più corto si riempie di NULL.
- 2 bytes
- 2 bytes
- Lunghezza del campo. Short in Network Byte Order. Per i valori ammessi a seconda del tipo vedi la CreateDatabaseFile().
Nel file LPC_Include.h vi sono 2 costanti per calcolare la lunghezza totale dell'Header:
- DBF_FIXED_HEADER_LEN
- lunghezza della parte fissa fino all'inizio della definizione dei campi (esclusi quindi anche i 2 NULL finali;
- DBF_FIELD_LEN
- lunghezza della definizione di ogni campo.
Per la scrittura dell'Header e' consigliabile creare un buffer di caratteri, serializzare tutti i campi necessari nel buffer e poi scrivere il buffer nel file.
Il Network Byte Order e' l'ordinamento dei bytes concordato per la portabilita' dei dati. Vi sono principalmente 2 tipi di ordinamento, che dipendono dall'architettura del microprocessore:
- Little Endian:
- il byte meno significativo vien prima (little-end first);
- Big Endian:
- il byte piu' significativo viene prima (big-end first);
Ad esempio la famiglia di processori Intel e' Little Endian, mentre Motorola 68000, Sparc e PowerPC sono Big Endian.
Per convenzione il formato Network byte Order e' Big Endian.
Vi sono 2 coppie di funzioni per la conversione Host-To-Network e viceversa:
- htons e ntohs che convertono uno short;
- htonl e ntohl che convertono un long;
Se per aprire il file viene utilizzata la funzione di stream fopen()
, ricordare che il file va aperto in modo binario. Sempre in caso di stream, per leggere e scrivere si consigliano le funzioni fread() e fwrite().
Un DBF non può essere cancellato se è aperto. Il modo di verificare questo è verificare se esiste un file che ha lo stesso nome ma ha estensione DBF_OPEN_EXT.
Generated on Wed Mar 1 11:56:01 2006 for LPC - Modulo 1 by
1.4.6-NO