首页 > 其他分享 >kore load 模块的一些功能

kore load 模块的一些功能

时间:2023-11-29 13:11:21浏览次数:36  
标签:load return int kore 模块 KORE fixed ptr

目前此玩法官方文档暂时没介绍,但是示例中包含,感觉比较有意思,所以说明下

参考使用

  • 配置
    如下,就是包含了一个共享模块的路径以及一个字符串,这个字符串实际上是模块中的一个方法,可以实现一个当模块加载时候的任务
 
load        ./memtag.so init
  • 参考代码
#include <kore/kore.h>
#include <kore/http.h>
 
/*
 * This example demonstrates how dynamically reloadable modules
 * can use the memory tagging system in Kore in order to restore
 * the global pointers in the module.
 */
 
/* Some unique value. */
#define MEM_TAG_HELLO        100
 
int        init(int);
int        page(struct http_request *);
 
/* Global pointer, gets initialized to NULL when module loads/reloads. */
char        *fixed_ptr = NULL;
// 属于标准的签名格式
int
init(int state)
{
    /* Ignore unload(s). */
    if (state == KORE_MODULE_UNLOAD)
        return (KORE_RESULT_OK);
 
    printf("fixed_ptr: %p\n", (void *)fixed_ptr);
 
    /* Attempt to lookup the original pointer. */
    if ((fixed_ptr = kore_mem_lookup(MEM_TAG_HELLO)) == NULL) {
        /* Failed, grab a new chunk of memory and tag it. */
        printf("  allocating fixed_ptr for the first time\n");
        fixed_ptr = kore_malloc_tagged(6, MEM_TAG_HELLO);
        kore_strlcpy(fixed_ptr, "hello", 6);
    } else {
        printf("  fixed_ptr address resolved\n");
    }
 
    printf("  fixed_ptr: %p\n", (void *)fixed_ptr);
    printf("  value    : %s\n", fixed_ptr);
 
    return (KORE_RESULT_OK);
}
 
int
page(struct http_request *req)
{
    http_response(req, 200, fixed_ptr, strlen(fixed_ptr));
    return (KORE_RESULT_OK);
}

参考加载处理

  • config.c
static int
configure_load(char *options)
{
    char        *argv[3];
 
    kore_split_string(options, " ", argv, 3);
    if (argv[0] == NULL)
        return (KORE_RESULT_ERROR);
    // 此处会构建kore 的模块,特别类似nginx 的module
    kore_module_load(argv[0], argv[1], KORE_MODULE_NATIVE);
    return (KORE_RESULT_OK);
}

参考资料

https://github.com/jorisvink/kore/blob/master/src/module.c#L69
https://github.com/jorisvink/kore/blob/master/examples/memtag/conf/memtag.conf#L7

标签:load,return,int,kore,模块,KORE,fixed,ptr
From: https://www.cnblogs.com/rongfengliang/p/17864590.html

相关文章

  • kore 配置简单说明
    kore官方提供对于配置的说明比较少(只包含了一些核心的,其他的没有详细说明)但是提供了一个参考示例一些配置实际建议还是通过结合代码阅读比较方便,config.c中关于配置有比较完整的说明,同时也会发现一些官方暂时没介绍的http_server_version配置这个是配置serverresponse......
  • linux启动mysql数据库,报错mysql: error while loading shared libraries: libtinfo.so
    如下 原因: 解决方案:1、在/usr/lib64目录里面找一个差不多名称版本的文件进行链接#软连接出一个新的文件sudoln-s/usr/lib64/libtinfo.so.6.1/usr/lib64/libtinfo.so.5若本服务器没有相近版本的文件2、从其他服务器下载一个libtinfo.so.5拷贝进去即可,或者下载相近版本......
  • Day20.模块的介绍_导入发生三件事_引用强调一_引用强调二_导入多个模块和规范_导入模
    1.模块的介绍:2.首次导入发生的三件事:3.引用强调一:4.引用强调二:5.导入多个模块和导入规范:6.导入模块的其他知识点: ......
  • CommonJS模块和ECMAScript模块
    CommonJS(简称cjs),为node.js打包javaScript的原始方法,使用require和imports(module.exports)语句定义模块ECMAScript模块(简称esm),是ecma262标准下封装的JavaScript代码重用的官方标准格式。使用import和export语句定义模块 -cjs只有在node.js环境使用。-esm在node.js和浏览器......
  • Python常用的数据处理函数和模块
    Python还提供了许多其他用于数据处理和转换的内置函数和模块。以下是一些常用的数据处理函数和模块:sortedsorted(iterable,key=func,reverse=False)用于对可迭代对象进行排序。你可以指定一个可选的key函数来自定义排序规则,以及一个可选的reverse参数来控制升序或降序排......
  • BOSHIDA DC电源模块的散热措施可以分为以下几种
    BOSHIDADC电源模块的散热措施可以分为以下几种DC电源模块的散热措施可以分为以下几种:1.增加散热器:在DC电源模块的电路板上增加散热片或散热器,通过增加散热面积和散热能力来提高散热效果。2.增加风扇:在散热器的基础上增加风扇,通过强制空气对散热器进行冷却来提高散热效果。3......
  • DC电源模块的散热措施可以分为以下几种
    BOSHIDADC电源模块的散热措施可以分为以下几种DC电源模块的散热措施可以分为以下几种:增加散热器:在DC电源模块的电路板上增加散热片或散热器,通过增加散热面积和散热能力来提高散热效果。增加风扇:在散热器的基础上增加风扇,通过强制空气对散热器进行冷却来提高散热效果。优化散热结构......
  • npm学习(六)之如何创建 Node.js 模块
      如何创建Node.js模块Node.js模块是一种可以发布到npm的包。当你创建一个新模块时,创建 package.json 文件是第一步。你可以使用 npminit 命令创建 package.json 文件。命令行中将会提示 package.json 字段中需要你输入的值。名称(name) 和 版本(version) 这......
  • Vue3 + [email protected] + UploadPictureCard
    <template><a-uploadname="file"v-model:file-list="showFileList"list-type="picture-card":multiple="multiple":max-count="maxCount":before-up......
  • kore可扩展安全的Web 应用程序框架
    kore是基于c开发的web框架,可以让我们使用c以及python开发webapi,主要的特点是安全以及可扩展主要特性SNI支持http1.1支持websocket支持默认TLS支持可选后台任务内置参数校验基于acme的自动https权限分离设计可选异步pg访问模块热加载worker进程沙箱支持(基......