Precedente: Operazioni interne file, Su: Esempio di estensione [Contenuti][Indice]
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
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: Operazioni interne file, Su: Esempio di estensione [Contenuti][Indice]