Successivo: Descrizione dell'estensione API, Precedente: Licenza delle estensioni, Su: Estensioni dinamiche [Contenuti][Indice]
La comunicazione tra
gawk
e un’estensione è bidirezionale. Dapprima, quando
un’estensione è caricata, gawk
le passa un puntatore a una struttura
(struct
) i cui campi sono dei puntatori di funzione.
Questo si può vedere in Figura 17.1.
L’estensione è in grado di chiamare funzioni all’interno di gawk
utilizzando questi puntatori a funzione, in fase di esecuzione, senza aver
bisogno di accedere (in fase di compilazione), ai simboli di gawk
.
Uno di questi puntatori a funzione punta a una funzione che serve per
“registrare” nuove funzioni.
Questo è mostrato in Figura 17.2.
Nella direzione opposta, l’estensione registra le sue nuove funzioni
con gawk
passando dei puntatori che puntano alle funzioni che
implementano la nuova funzionalità, (p.es. do_chdir()
). gawk
associa il puntatore a funzione con un nome ed è in grado di chiamarlo in
seguito, usando una convenzione di chiamata predefinita.
Questo è mostrato in Figura 17.3.
La funzione do_xxx()
, a sua volta, utilizza i puntatori a
funzione nella struttura (struct
) API per svolgere il proprio compito,
come aggiornare variabili o vettori, stampare messaggi, impostare la
variabile ERRNO
, e così via.
Delle macro di servizio rendono la chiamata effettuata utilizzando i puntatori simile a quella delle funzioni normali, in modo che il codice sorgente delle estensioni rimanga sufficientemente leggibile e comprensibile.
Sebbene tutto ciò possa sembrare piuttosto complesso, il risultato è che il codice sorgente dell’estensione è abbastanza intuitivo da scrivere e da leggere. Lo si può constatare nell’estensione di esempio filefuncs.c (vedi la sezione Esempio: alcune funzioni per i file), come pure nel codice testext.c, che testa l’interfaccia di programmazione (API).
Ecco alcuni ulteriori dettagli:
gawk
do_xxx
, che memorizzano opzioni della riga di comando come
do_lint
, do_profiling
, e così via (vedi la sezione Variabili fornite dall’API).
Questi valori sono solo informativi: un’estensione non può modificarli
all’interno di gawk
. Oltre a ciò, il tentativo di assegnare loro
dei valori produce un errore quando l’estensione viene compilata.
gawk
, in modo che un’estensione possa controllare se il
comando gawk
che l’ha caricata è in grado di supportare le
funzionalità utilizzate nell’estensione. (Discrepanze tra le versioni
“non dovrebbero” accadere, ma si sa come vanno queste cose.)
Vedi la sezione Costanti e variabili della versione dell’API per ulteriori dettagli.
Successivo: Descrizione dell'estensione API, Precedente: Licenza delle estensioni, Su: Estensioni dinamiche [Contenuti][Indice]