Precedente: , Su: Esempio di estensione   [Contenuti][Indice]


16.6.3 Integrare le estensioni

Dopo aver scritto il codice, dev’essere possibile aggiungerlo in fase di esecuzione all’interprete gawk. Per prima cosa, il codice va compilato. Supponendo che le funzioni siano in un file di nome filefuncs.c, e che idir sia la posizione del file di intestazione gawkapi.h, i seguenti passi114 creano una libreria condivisa GNU/Linux:

$ gcc -fPIC -shared -DHAVE_CONFIG_H -c -O -g -Iidir filefuncs.c
$ gcc -o filefuncs.so -shared filefuncs.o

Una volta creata la libreria, questa viene caricata usando la parola chiave @load:

# file testff.awk
@load "filefuncs"

BEGIN {
    "pwd" | getline curdir  # salva la directory corrente
    close("pwd")

    chdir("/tmp")
    system("pwd")   # verifica l'avvenuto cambio di directory
    chdir(curdir)   # torna indietro

    print "Info per testff.awk"
    ret = stat("testff.awk", data)
    print "ret =", ret
    for (i in data)
        printf "data[\"%s\"] = %s\n", i, data[i]
    print "testff.awk modified:",
        strftime("%m %d %Y %H:%M:%S", data["mtime"])

    print "\nInfo per JUNK"
    ret = stat("JUNK", data)
    print "ret =", ret
    for (i in data)
        printf "data[\"%s\"] = %s\n", i, data[i]
    print "JUNK modified:", strftime("%m %d %Y %H:%M:%S", data["mtime"])
}

La variabile d’ambiente AWKLIBPATH dice a gawk dove è possibile trovare le estensioni (vedi Trovare le estensioni). La variabile viene impostata alla directory corrente, e quindi viene eseguito il programma:

$ AWKLIBPATH=$PWD gawk -f testff.awk
-| /tmp
-| Info per testff.awk
-| ret = 0
-| data["blksize"] = 4096
-| data["devbsize"] = 512
-| data["mtime"] = 1412004710
-| data["mode"] = 33204
-| data["type"] = file
-| data["dev"] = 2053
-| data["gid"] = 1000
-| data["ino"] = 10358899
-| data["ctime"] = 1412004710
-| data["blocks"] = 8
-| data["nlink"] = 1
-| data["name"] = testff.awk
-| data["atime"] = 1412004716
-| data["pmode"] = -rw-rw-r--
-| data["size"] = 666
-| data["uid"] = 1000
-| testff.awk modified: 09 29 2014 18:31:50
-|
-| Info per JUNK
-| ret = -1
-| JUNK modified: 01 01 1970 02:00:00

Note a piè di pagina

(114)

In pratica, si potrebbe decidere di usare i comandi GNU Autotools (Automake, Autoconf, Libtool, e gettext) per configurare e costruire le librerie necessarie. L’esposizione di come ciò può essere fatto esula dal tema di questo Documento. Vedi gawkextlib per i puntatori a siti Internet che permettono di accedere a questi strumenti.


Precedente: , Su: Esempio di estensione   [Contenuti][Indice]