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]