美文网首页
Windows平台实现awk extension模块

Windows平台实现awk extension模块

作者: CodingCode | 来源:发表于2023-02-24 10:45 被阅读0次
  1. 首先需要下载编译

下载mbuilov/gawk-windows,按照说明编译成功。

https://github.com/mbuilov/gawk-windows

步骤:

  1. 下载依赖
    https://github.com/mbuilov/mscrtx.git
    https://github.com/mbuilov/libutf16.git
    https://github.com/mbuilov/unicode_ctype.git

  2. 打开”x64 Native Tools Command Prompt for VS 20XX"

set "MSCRTX=\path\to\mscrtx-master"
set "LIBUTF16=\path\to\libutf16-master"
set "UNICODE_CTYPE=\path\to\unicode_ctype-master"

  1. cd \path\to\gawk-windows-new-master
  2. build.bat all

这里有一些自带的extension可以提供参考。

  1. 实现myawkext.c
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include <stdio.h>
#include <inttypes.h>

#include "gawkapi.h"

GAWK_PLUGIN_GPL_COMPATIBLE
GAWK_PLUGIN("my awk extension: version 1.0");


static awk_value_t *
do_mystrlen(int nargs, awk_value_t *result, struct awk_ext_func *unused)
{
        int ret = 0;
        awk_value_t file_param, array_param;
        const char *name;

        if (! get_argument(0, AWK_STRING, & file_param)) {
                return make_number(-1, result);
        }

        name = file_param.str_value.str;
        ret = strlen(name);

        return make_number(ret, result);
}

static awk_bool_t
init_myawkext(void)
{
        int errors = 0;
        return (awk_bool_t) (errors == 0);
}

static awk_ext_func_t myawkext_funcs[] = {
        { "mystrlen",   do_mystrlen, 3, 1, awk_false, NULL },
};


dl_load_func(init_myawkext, myawkext_funcs, myawkext, "")

定义了myawkext.c文件,提供一个函数:"mystrlen"返回字符串的长度。
注意这里用到的两个头文件,"config.h"和"gawkapi.h"都是gawk生成的。

  1. 编译
rm -f myawkext.obj
rm -f myawkext.dll
rm -f myawkext.exp
rm -f myawkext.lib

set GAWKWINHOME=c:/path/to/gawk-windows-new-master

cl.exe /LD /DHAVE_CONFIG_H -I%GAWKWINHOME% -I%GAWKWINHOME%/pc myawkext.c

REM Or
REM cl.exe /c /DHAVE_CONFIG_H -I%GAWKWINHOME% -I%GAWKWINHOME%/pc /Fomyawkext.obj myawkext.c
REM link.exe /DLL /OUT:myawkext.dll myawkext.obj
  1. 运行
> cat test.awk
@load "myawkext"
BEGIN {
   printf "len=%d\n", mystrlen("1234567")
}


> awk -f test.awk
7

相关文章

  • 利用python设计个性签名

    TK在大多数 Unix平台、Windows平台和Macintosh系统都是预装好的,TKinter 模块是 Tk ...

  • Python os模块常用函数详解

    Python os模块常用函数详解 当前使用平台: os.name#返回当前使用平台的代表字符,Windows用'...

  • python+opencv实时视频目标检测

    opencv环境 1、访问Python Extension Packages for Windows,下载pyth...

  • 进程学习记录1

    跨平台的进程创建模块 1.方法一: 使用 Process 类创建子进程 支持跨平台:windows / linux...

  • 20170904 awk

    awk介绍awk变量printf命令:实现格式化输出操作符awk patternawk actionawk数组aw...

  • 架构设计与技术选型

    项目参数:开发平台:Mac/Windows/Linux架构模式:前后端完全分离、纯静态方式、分层架构模块化模块化方...

  • winsound- Windows的声音播放模块

    winsound模块提供对Windows平台的基本声音播放功能的访问。他包含函数和一些常量。1.导入模块 2.wi...

  • python os模块和shutil模块

    Python os 模块常用命令 1.os.name()——判断现在正在实用的平台,Windows 返回 ‘nt'...

  • Java JCE Cipher 详解

    本文是对 Java 语言安全模块 JCE( Java Cryptography Extension,Java 密码...

  • 跨平台框架

    跨平台调研 Cordova:iOS、macOS、windows、android 优点: 1)灵活实现UI样式、支持...

网友评论

      本文标题:Windows平台实现awk extension模块

      本文链接:https://www.haomeiwen.com/subject/eubzkdtx.html