Sky
Vittorio vb Bertola
Affacciato sul Web dal 1995

Ven 14 - 20:52
Ciao, essere umano non identificato!
Italiano English Piemonteis
home
home
home
chi sono
chi sono
guida al sito
guida al sito
novità nel sito
novità nel sito
licenza
licenza
contattami
contattami
blog
near a tree [it]
near a tree [it]
vecchi blog
vecchi blog
personale
documenti
documenti
foto
foto
video
video
musica
musica
attività
net governance
net governance
cons. comunale
cons. comunale
software
software
aiuto
howto
howto
guida a internet
guida a internet
usenet e faq
usenet e faq
il resto
il piemontese
il piemontese
conan
conan
mononoke hime
mononoke hime
software antico
software antico
lavoro
consulenze
consulenze
conferenze
conferenze
job placement
job placement
business angel
business angel
siti e software
siti e software
admin
login
login
your vb
your vb
registrazione
registrazione

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
Questo sito è (C) 1995-2018 di Vittorio Bertola - Informativa privacy e cookie
Alcuni diritti riservati secondo la licenza Creative Commons Attribuzione - Non Commerciale - Condividi allo stesso modo
Attribution Noncommercial Sharealike