Sky
Vittorio vb Bertola
Fasendse vëdde an sla Ragnà dal 1995

Giò 18 - 4:55
Cerea, përson-a sconòssua!
Italiano English Piemonteis
chi i son
chi i son
guida al sit
guida al sit
neuve ant ël sit
neuve ant ël sit
licensa
licensa
contatame
contatame
blog
near a tree [it]
near a tree [it]
vej blog
vej blog
përsonal
papé
papé
fotografie
fotografie
video
video
musica
musica
atività
net governance
net governance
consej comunal
consej comunal
software
software
agiut
howto
howto
internet faq
internet faq
usenet e faq
usenet e faq
autre ròbe
ël piemonteis
ël piemonteis
conan
conan
mononoke hime
mononoke hime
vej programa
vej programa
travaj
consulense
consulense
conferense
conferense
treuvo travaj
treuvo travaj
angel dj'afé
angel dj'afé
sit e software
sit e software
menagé
login
login
tò vb
tò vb
registrassion
registrassion

VB CGI-C Libraries

Versione: 2.11 (1/12/1998)
Lingua: Italiano
Linguaggio: C
Sistema operativo: Unix/DOS

Descrizione

Queste librerie contengono una serie di funzioni utili per la realizzazione di programmi CGI in linguaggio C, e per altre operazioni collaterali come la manipolazione di stringhe.

Installazione

E' necessario includere nei programmi C gli header (file .h) delle librerie che si desidera utilizzare. E' poi ovviamente necessario compilare anche i corrispondenti file .c insieme ai propri: sotto Unix, con gcc, basta aggiungerli sulla riga di comando (esempio: gcc miofile.c formlib.c pairlist.c), mentre con certi compilatori per DOS (ad esempio Borland Turbo C) è necessario creare un "progetto" in cui includere tutti i sorgenti necessari.

Guida all'uso

Per la sintassi e il funzionamento delle singole funzioni vi rimando ai commenti negli header.

Comunque, ecco la struttura tipica di un programma che legge l'output prodotto da un modulo WWW con il metodo POST, e che possa quindi essere indicato come valore dell'attributo ACTION della tag FORM:

#include "formlib.h"

void main(void) {

    T_LIST lista;
    char *p, *q;
    ListCreate(&lista);
    if (!MethodIsPOST()) exit(1);
    if (!TypeIsForm()) exit(2);
    GetPOSTVars(&lista);
    p = ListRead(&lista, "Variabile 1");
    q = ListRead(&lista, "Variabile 2");
    if ((p != NULL) && (q != NULL)) {
        ... elaborazione dei dati forniti dall'utente ...
        SendMIMEHeading();
        ... stampa della pagina di output ...
    }
    ListFree(&lista);

}
In altre parole, per prima cosa deve essere definita una lista (ListCreate()), quindi devono essere effettuati i controlli sul tipo di dati forniti dal server HTTP al programma (MethodIsPOST() e TypeIsForm()), e infine devono essere caricati nella lista i valori dei campi della form (GetPOSTVars()); è poi possibile leggere dalla lista i singoli campi (ListRead()), e, se essi sono stati letti correttamente, elaborarli e generare una pagina di output da rispedire all'utente; alla fine si può deallocare la memoria della lista (ListFree()).

Le variabili fornite dall'utente possono essere lette con la chiamata

p = ListRead(&lista, "Nome del campo INPUT");

dove p è un char * (non è necessario allocare memoria): per leggere dei numeri è necessario convertire la stringa restituita in p in un numero usando funzioni come atoi(). La funzione restituisce NULL se per qualche motivo non esiste o non è stato letto un campo con tale nome, quindi è bene effettuare un controllo subito dopo la chiamata a ListRead(). Per manipolare le stringhe fornite dall'utente possono essere utili le numerose funzioni di libreria disponibili includendo STRINLIB (si veda la descrizione in strinlib.h).

La pagina da restituire all'utente può essere generata "al volo" mediante delle semplici printf() che stampano il sorgente HTML sullo stdout; tuttavia, prima della prima printf() deve essere chiamata la funzione di inizializzazione dell'output SendMIMEHeading(). Se non volete generare una pagina al volo, ma soltanto spedire una pagina preconfezionata sempre uguale, vi consiglio di includere anche la libreria OUTFILE e di utilizzare al posto delle printf() la funzione OutputFile().

Durante l'elaborazione dei dati avrete sicuramente la possibilità di verificare delle condizioni d'errore. Poichè il programma va fatto girare non direttamente, ma richiamato dal server HTTP, è impossibile mandare semplicemente messaggi d'errore sullo stdout, come si fa normalmente. Vi conviene quindi utilizzare la chiamata SendError("messaggio");, che provvede a generare una intera pagina HTML contenente il messaggio d'errore da voi indicato come argomento. In questo modo potrete avvertire correttamente gli utenti del programma con messaggi d'errore. Ovviamente, la funzione va utilizzata prima di cominciare a scrivere sull'output la pagina di risposta vera e propria: anche per questo è bene separare nettamente la fase di elaborazione da una fase finale in cui si stampa tutta la pagina di risposta.

Per aiutarvi nel debug, potete anche utilizzare le funzioni della libreria LOG: esse permettono di creare un file di log e di scrivervi messaggi in modo "sicuro", in modo che, anche se il programma si pianta a metà, tutto quello che è stato loggato in precedenza venga scritto e sia leggibile a posteriori, aiutandovi a capire dove sta il problema.

Se lo scopo della form è quello di far spedire una mail, sarà necessario richiamare esternamente il programma di spedizione della posta (sotto Unix tipicamente si usa il comando sendmail -t < mail.txt, dove mail.txt è un file di testo che contiene l'intera mail, header inclusi). Si può allora scrivere un programma che legga l'input e generi il testo della mail su un file, e poi uno script che esegua tale programma e poi sendmail -t; come ACTION della form va ovviamente indicato lo script. Comunque, per CGI di questo tipo è particolarmente indicato l'uso del linguaggio Perl: vi sconsiglio il C.

Se al posto del metodo POST si vuole utilizzare il metodo GET, è sufficiente sostituire la funzione GetPOSTVars() con GetGETVars(), eliminare il controllo su TypeIsForm(), e sostituire il controllo del metodo con MethodIsGET().

Un'ultima nota: quando si usa la libreria FORMLIB è necessario utilizzare anche PAIRLIST; per poter utilizzare la libreria STRINLIB con GCC è necessario includere all'inizio del suo header anche STRING2T, e compilare anche tale file. STRING2T non è invece necessaria quando si usa Turbo C.

Scarica il programma

Archivio TAR GZippato (Unix)
Archivio ZIP (DOS)

Torna all'indice

Creative Commons License
Cost sit a l'è (C) 1995-2024 ëd Vittorio Bertola - Informassion sla privacy e sij cookies
Certidun drit riservà për la licensa Creative Commons Atribussion - Nen comersial - Condivide parej
Attribution Noncommercial Sharealike