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


16.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 16.1.

Caricamento dell’estensione

Figura 16.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 16.2.

Registrare una nuova funzione

Figura 16.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 16.3.

Chiamata della nuova funzione

Figura 16.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 Esempio di estensione), come pure nel codice testext.c, che testa l’interfaccia di programmazione (API).

Ecco alcuni ulteriori dettagli:


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