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


17.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 passi116 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 la sezione Come gawk trova le estensioni compilate). 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

(116)

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 la sezione Il progetto gawkextlib per i puntatori a siti Internet che permettono di accedere a questi strumenti.


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