Il programma descritto in queste pagine è un gateway program che accetta in input il numero di matricola di uno studente e restituisce in output una pagina html in cui è mostrato il risultato conseguito nell'ultima esercitazione. Per far questo il programma consulta un file, nel quale risiedono i risultati dell'esercitazione stessa. Il programma è didattico e, per questioni di brevità, è carente almeno riguardo due aspetti:
1) non è robusto quanto dovrebbe essere (esegue il minimo numero di controlli per poter funzionare);
2) non è "customizzabile": è piuttosto rigido, per esempio, nel formato del file database, nel numero di prove di cui deve riportare il voto ecc. ecc.
Sono invece volutamente eccessive le opzioni implementate per il passaggio di parametri. Un gateway program, infatti, può ricevere input in tre modi: a) linea di comando; b) variabili d'ambiente; c) standard input. Inoltre nel mandare il suo output al server tramite lo standard output può seguire due strategie: i) parsed header; ii) non parsed header. Nel codice sono implementate tutte queste alternative in tutte le combinazioni, mentre generalmente un gateway non didattico implementa un solo metodo per l'acquisizione dell'input ed una sola disciplina per il rilascio dell'output. E' facile immaginare, comunque, delle semplici modifiche per adattare questo codice ad un qualsiasi applicativo.

Il formato del file database è quello di un semplice file testuale. Piuttosto che descriverlo se ne riporta qui un esempio:
 

100000000 5 6 7 8 9 
200000000 1 2 3 4 5.5 
300000000 5 6 7 3.5 9 
400000000 1 40 3 4 5.67 
500000000 2.3 4.5 6.7 8 10
Come si vede ogni riga comincia con il numero di matricola di uno studente (che si immagina costituito da 9 cifre) seguito da cinque numeri (che possono avere il punto decimale) separati tra loro da spazi.

Il programma è così organizzato:

Per semplicità si è fatto un uso disinvolto di variabili globali. Si suppone che siano definite le seguenti:
 
 
char *cursore_file; cursore che servirà a percorrere le stringhe contenute nel file database.
char *valore_input; punterà alla stringa di input. Viene assegnato dalla funzione estrai_input() ed utilizzato da cerca_nel_file()e manda_fuori_codice_html().
char *val_1, *val_2, *val_3, *val_4, *val_5; puntatori alle strighe rappresentanti i voti dello studente estratti dal file database. Viene assegnato dalla funzione cerca_nel_file() ed utilizzato da manda_fuori_codice_html().
int   end_of_file_met; intero usato come flag: vale zero se la matricola è stata trovata nel file; vale 1 se il file è stato controllato tutto senza aver trovato il numero di matricola desiderato.
 
Per chiarezza si è ricorso a delle macro per sostiture dei valori ricorrenti: ecco le direttive di precompilazione relative:

#define COPPIA_NOME_VALORE 0
#define PARAMETRO_COMMAND_LINE 1
#define NOME_FILE
"/afs/vn.uniroma3.it/group/gc/gdb/public/public_html/impianti/results.101097"


torna all'indice   prossima pagina