Successivo: , Precedente: , Su: Estensioni dinamiche   [Contenuti][Indice]


17.3 Una panoramica sul funzionamento ad alto livello

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.

Caricamento dell’estensione

Figura 17.1: Caricamento dell’estensione

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.

Registrare una nuova funzione

Figura 17.2: Registrare una nuova funzione

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.

Chiamata della nuova funzione

Figura 17.3: Chiamata della nuova funzione

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:


Successivo: , Precedente: , Su: Estensioni dinamiche   [Contenuti][Indice]