首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

lua调用c语言so动态库--以waf中证书检查为例

​ 需求 在基于nginx做waf开发时,nginx+lua+c动态库是常见的开发模式,在lua生态无法满足需求时,就需要我们在lua代码中调用动态库的方式,进行扩展,下面以lua调用c语言+openssl...动态库的方式,进行判断证书的创建时间和证书的过期时间为例,进行说明 由于lua没有openss sdk做证书检查校验工作,那么就需要我们基于c语言和openssl库些一个so动态库,以供lua调用去判断证书有效时间...create_cert_time函数为获取证书创建时间,函数的参数为证书的路径(即:string类型),那么就可以通过path = lua_tostring(L,1),获取lua传来的证书路径,随后在c语言的函数中调用...通过luaopen_xxx实现,xxx标识c函数封装so动态库的名称,该例中动态库名称为libcert.so,固函数名为luaopen_libcert,luaL_register参数为lua_State...int luaopen_libcert(lua_State *L) { luaL_register(L,"libcert",lib); return 1; } lua代码调用c动态库

1.8K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C语言】动态内存管理

    这样我们引入动态内存开辟,就可以实现我们自己申请和释放空间 二、malloc和free 二者都在头文件 stdlib.h 下 1、malloc malloc是一个动态内存开辟函数 void* malloc...ptr指向程序员想要释放的动态开辟的内存 如果ptr指向的空间不是动态开辟的,那么它的行为将取决于编译器 如果ptr指向的是NULL指针,则free啥也不干 #include #include...(p);//p不再指向动态内存的起始位置 } 5、对同一块动态内存进行多次释放,即多次对一个地址使用free 6、忘记释放动态开辟内存,造成内存泄漏 五、常见错误 1、形参实参问题、内存泄漏问题 #include...,将hello复制到里边,然后释放,然后再检查str是否为NULL,再将world复制里边,打印....然后打印,非常不安全 六、柔性数组 在C99中,结构中的最后一个元素如果是数组的话,可以允许它是未知大小的,叫做柔性数组成员 struct S { int i; char a[0];//柔性数组,有的编译器上写

    9710

    C语言动态内存管理

    所以此时就有一个思路,我们把初始时候的大小设为5个,满了就+2个,以此类推,那么空间就不会被浪费太多对吧,所以C语言中动态内存的知识就来咯~ 一、动态内存函数介绍 1.1 malloc和...free C语言提供了动态内存开辟的函数malloc void* malloc(size_t size)//动态内存的开辟 这个函数会向内存申请一个 连续可用的空间,并返回空间的起始地址...如果开辟空间失败,则返回空指针,因此开辟完空间的时候需要我们去检查一下这个指针是否为空 3....); return 1; } 之后就可以进行对应的操作啦,当你操作完了之后,要记得向内存还回去这个空间,不要有借无还噢,因此我们就需要用到空间释放的函数free C语言提供了另外一个函数...) { int* ptr = malloc(100); *ptr = 20;//如果没有开辟成功,ptr就为空指针 free(ptr); return 0; } 因此我们需要先检查

    6410

    C语言---动态内存管理

    C语⾔引⼊了动态内存开辟,让程序员⾃⼰可以申请和释放空间,就⽐较灵活了。...2.malloc和free malloc函数 C语言提供了一个动态内存开辟的函数:malloc --头文件stdlib.h void * malloc (size_t size); 就是你利用malloc...• 如果开辟失败,则返回⼀个 NULL 指针,因此malloc的返回值⼀定要做检查。...• 如果参数 size 为0,malloc的⾏为是标准是未定义的,取决于编译器 我们在用malloc是要检查返回值是不是空指针 free函数 C语⾔提供了另外⼀个函数free,专⻔是⽤来做动态内存的释放和回收的...(其实,我个⼈觉得也没多⾼了,反正你跑不了要⽤做偏移量的加法来寻址) malloc用多了,内存碎片也多了 7.总结c/c++中程序内存区域划分 局部变量放在栈区 函数的参数也放在栈区 堆区是动态申请的内存都在堆区

    8810

    C语言_动态内存管理

    二.动态内存函数的介绍 2.1 malloc 和 free C语言提供一动态内存开辟函数: void*malloc(size_t size); 这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针...如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。 返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。...当程序不退出,动态申请的内存,不会主动释放的。 需要使用 free 函数来释放。 2.2 calloc c语言还提供了一个函数叫 calloc ,calloc函数也用来动态内存分配。...三.常见的动态内存错误 3.1 对NULL的解引用操作 3.2对动态开辟空间的越界访问 3.3非动态开辟内存使用free释放 3.4使用free释放一块动态开辟内存的一部分 3.5 对同一块动态内存多次释放...程序结束(退出) 四.C/C++中程序的内存区域划分 栈区(stack): 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。

    26020

    C语言——动态内存管理

    1.为什么要用动态内存分配 我们已经掌握的内存开辟方式有: 1.直接创建变量 int i = 10;//在栈空间上开辟四个字节(向内存申请4个字节) char a = 5;//1个字节空间 2.向内存申请一片连续的空间...这时候就只能试试动态存开辟了 2.malloc和free 2.1 malloc malloc:向内存申请一块连续可用的空间,并返回指向这块空间的指针 1....如果开辟成功,则返回一个指向开辟好空间的指针 2.如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查 3.返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型...    传递给free函数的只能是要释放的空间的起始地址,不能是中间地址 1.如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的 2.如果参数ptr是NULL指针,则函数什么事都不做...那realloc 函数就可以做到对动态开辟内存大小的调整  1.ptr 是要调整的内存地址 2.size 调整之后新大小 3.返回值为调整之后的内存起始位置。

    11710

    C语言-动态内存管理

    所以针对这种情况C语言引入了动态内存开辟,让程序员自己可以申请和释放空间。增加了灵活性。...动态内存分配的特点: 主动申请 大小调整 释放空间 2、malloc和free 2.1 malloc函数 C语言中提供了一个动态内存开辟的函数: void* malloc (size_t size)...2.2 free函数 在C语言中,提供了另外一个函数free,专门用来做动态内存的释放和回收的,函数原型如下: void free (void* ptr); 注意:free函数只能用来释放动态开辟的内存...3、calloc和realloc 3.1 calloc函数 在C语言中还提供了一个函数calloc,calloc函数也用来动态内存分配,函数原型如下 void* calloc(size_t num,size_t...结语: 本篇文章介绍了动态内存所需要的一些函数,下篇文章将会介绍常见的动态内存错误问题

    7310

    低级工具——C语言C++

    提高速度可以使用多进程,但是多进程占用系统资源太多,为了减少占用的资源并提高性能,就该拿起低级工具,将“前盖”打开并对“引擎”进行调整。 这里的低级工具就是C语言/C++。...有些读者应该是不懂C语言/C++的,所以这篇文章我就来讲一下C语言/C++为什么可以作为低级工具,为什么它们速度非常快?...看一下import的源码,会发现在import的时候它会对pyc文件和py文件的最后修改日期进行检查,如果发现py文件的修改日期晚于pyc文件的修改日期,就进行重新编译。...C语言/C++是编译性语言 C语言/C++属于典型的编译性语言,而且它们更接近底层,可以直接操控硬件,运行速度当然也是非常快!为了让大家更好的对“引擎”进行调整,懂得低级工具的使用过程是很有必要的!...我只讲Windows下的C程序运行过程,UNIX的C会略有涉及,但不会细讲。 C语言/C++运行的过程分为三步:编译,链接,运行。

    2.1K10

    【C语言】动态内存管理

    C语言引入了动态内存开辟,让程序员自己可以申请和释放空间,就比较较灵活了。...如果开辟失败,则返回一个 NULL 指针,因此malloc的返回值一定要做检查。 返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。...3.2 free C语⾔提供了另外⼀个函数free,专门是用来做动态内存的释放和回收的,函数原型如下: void free (void* ptr); free函数⽤来释放动态开辟的内存。...4.1 calloc C语言还提供了⼀个函数叫 calloc , calloc 函数也用来动态内存分配。...10; i++) { printf("%d\n", p[i]); } //释放 free(p); p = NULL; return 0; } 结果都是: 4.2 realloc C语言还提供了

    14410

    C语言 动态内存分配

    在C语言中,全局变量分配在内存中的静态存储区,非静态的局部变量(包括形参)是分配在内存的动态存储区,该存储区被称为栈。...除此之外,C语言还允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要是随时释放。...系统提供了四个库函数来实现内存的动态分配: (1)malloc(size) 在内存的动态存储区中分配一个长度为size的连续空间。...(2)calloc(n,size) 在内存的动态存储区中分配n个长度为size的连续空间。 (3)free§ 释放指针变量p做指向的动态空间。...,输入数字时,按照地址复制给动态数组的5个元素,p1指向第一个整型数据,调用check函数时,p1作为实参传递给形参p,因此可以理解为形参p和实参p1公享一段动态分配区。

    1.1K20

    c语言动态内存管理

    2. malloc和free c语言提供了一个开辟内存的函数叫malloc,具体怎么用呢看一段代码, void* malloc (size_t size); 这是malloc的使用,参数是一个size_t...2.2 free c语言提供了另外一个函数free,是专门用来回收内存空间的 , void free (void* ptr); free如果参数不是动态空间,那free的行为是未定义的,如果参数是空指针...3. calloc和realloc 3.1 calloc c语言还提供了一个函数叫calloc,和malloc类似的。...4.3 对⾮动态开辟内存使⽤free释放 free是专门用来释放动态内存的,如果对非动态内存来进行释放,同样程序会崩溃掉的。...总结C/C++中程序内存区域划分 C/C++程序内存分配的⼏个区域: 1. 栈区(stack):在执⾏函数时,函数内局部变量的存储单元都可以在栈上创建,函数执⾏结束时 这些存储单元⾃动被释放。

    4500

    C语言动态内存开辟

    S类型的数据 //如果只有30个学生,就会有空间上的浪费 //如果有60个学生,空间又会不够 //数组的元素个数,是给定的一个常量 return 0; } ---- C语言是可以创建变长数组的...-C99中增加了(很多个编译器可能都还没有支持) 不够普遍。...//就应该还给操作系统 return 0; } malloc C语言提供了一个动态内存开辟的函数: ​ void* malloc (size_t size); 这个函数向内存申请一块连续可用的空间...如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。 返回值的类型是*void,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。...---- free C语言提供了另外一个函数free,专门是用来做动态内存释放和回收的。

    57010
    领券