File: gawk.info, Node: Using Internal File Ops, Prev: Internal File Ops, Up: Extension Example 17.6.3 Integrating the Extensions --------------------------------- Now that the code is written, it must be possible to add it at runtime to the running 'gawk' interpreter. First, the code must be compiled. Assuming that the functions are in a file named 'filefuncs.c', and IDIR is the location of the 'gawkapi.h' header file, the following steps(1) create a GNU/Linux shared library: $ gcc -fPIC -shared -DHAVE_CONFIG_H -c -O -g -IIDIR filefuncs.c $ gcc -o filefuncs.so -shared filefuncs.o Once the library exists, it is loaded by using the '@load' keyword: # file testff.awk @load "filefuncs" BEGIN { "pwd" | getline curdir # save current directory close("pwd") chdir("/tmp") system("pwd") # test it chdir(curdir) # go back print "Info for 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 for 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"]) } The 'AWKLIBPATH' environment variable tells 'gawk' where to find extensions (*note Finding Extensions::). We set it to the current directory and run the program: $ AWKLIBPATH=$PWD gawk -f testff.awk -| /tmp -| Info for 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 for JUNK -| ret = -1 -| JUNK modified: 01 01 1970 02:00:00 ---------- Footnotes ---------- (1) In practice, you would probably want to use the GNU Autotools (Automake, Autoconf, Libtool, and 'gettext') to configure and build your libraries. Instructions for doing so are beyond the scope of this Info file. *Note gawkextlib:: for Internet links to the tools.