深入了解 gawk 扩展开发:许可、通信与 API 详解
1. 扩展许可
动态扩展必须在与 GNU GPL 兼容的许可下分发。为了让扩展告知 gawk 其已正确获得许可,扩展必须定义全局符号 plugin_is_GPL_compatible 。若该符号不存在,gawk 在尝试加载扩展时会发出致命错误并退出。此符号声明类型应为 int ,无需位于任何已分配的节中,代码只需确保该符号存在于全局作用域即可,示例代码如下:
int plugin_is_GPL_compatible;
2. 高层工作原理
gawk 与扩展之间的通信是双向的。当扩展加载时,gawk 会传递一个指向结构体的指针,该结构体的字段为函数指针,如下图所示:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(gawk):::process -->|传递指针| B(扩展):::process
扩展可在运行时通过这些函数指针调用 gawk 内部的函数,无需在链接时访问 gawk 的符号。其中一个函数指针指向用于“注册”新函数的函数,流程如下:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6
超级会员免费看
订阅专栏 解锁全文
5

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



