深入探索gawk扩展开发:许可、通信与API详解
1. 扩展许可
在开发gawk的动态扩展时,必须遵循与GNU GPL兼容的许可协议来进行分发。为了让gawk知晓扩展已获得正确许可,扩展需要定义全局符号 plugin_is_GPL_compatible 。若该符号不存在,gawk在尝试加载扩展时会发出致命错误并退出。此符号的声明类型应为 int ,不过它无需位于任何已分配的节中,代码只需确保该符号存在于全局作用域即可。示例代码如下:
int plugin_is_GPL_compatible;
2. 高层工作原理
gawk与扩展之间的通信是双向的。当扩展被加载时,gawk会向其传递一个指向结构体的指针,该结构体的字段为函数指针。以下是其工作流程的详细说明:
- 扩展调用gawk函数 :扩展可在运行时通过这些函数指针调用gawk内部的函数,而无需在链接时访问gawk的符号。其中一个函数指针指向用于“注册”新函数的函数。
- 扩展向gawk注册新函数 :扩展通过传递提供新功能的函数(如 do_chdir() )的函数指针,将其新函数注册到gawk中。gawk会将函数指针与一个名称关联起来,然后使用定义好的调用约定来调用该函数。
- 新函数执行工作 : do_xxx() 函数会使用API结构体中的函数指针来完成其工作,例如更新变量或数组
超级会员免费看
订阅专栏 解锁全文
2

被折叠的 条评论
为什么被折叠?



