BIO的声明和释放等基本操作
在BIO的基本操作系列函数中,他们用来BIO分配和释放操作,包括:
BIO_new, BIO_set, BIO_free, BIO_vfree, BIO_free_all
他们的声明在openssl/bio.h文件中,其声明形式如下:
BIO * BIO_new(BIO_METHOD *type);
int BIO_set(BIO *a,BIO_METHOD *type);
int BIO_free(BIO *a);
void BIO_vfree(BIO *a);
void BIO_free_all(BIO *a);
下面分别对这些函数进行解释.
【BIO_new】
这个函数创建并返回一个相应的新的BIO,并根据给定的BIO_METHOD类型调用下述的BIO_set()函数给BIO结构的method成员赋值,如果创建或给method赋值失败,则返回NULL。创建一个Memory类型的BIO例子如下:
BIO* mem=BIO_new(BIO_s_mem());
有些类型的BIO使用BIO_new()函数之后就可以直接使用了,如memory类型的BIO;而有些BIO创建之后还需要一些初始化工作,如文件BIO,一般来说,也提供了这样的一些函数来创建和初始化这种类型的BIO。
这是什么意思呢,举个简单的例子大家就明白了:
比如创建一个文件BIO,使用下面的代码:
BIO* in=NULL;
in=BIO_new(BIO_s_file());
BIO_read_filename(in,"rsa512.pem");
这样,BIO in才能使用,而如果是创建一个memory类型的BIO,则只需要如下一句代码:
BIO* mem=BIO_new(BIO_s_mem());
然后就可以对该BIO mem进行操作了。
另外,需要补充的是(这个大家从前面两篇文章可能已经认识到了),对于source/sink类型的BIO,其类型创建函数一般为BIO_s_*的形式,对于filter型的函数,其类型创建函数一般为BIO_f_*的形式。
【BIO_set】
该函数功能比较简单,就是对一个已经存在的BIO设置新的BIO_METHOD类型。其实就是简单的对BIO的各个成员进行初始化,并将参数type赋值给该BIO。其实,BIO_new函数在使用OPENSSL_malloc给BIO分配了内存之后,就简单调用了BIO_set函数进行初始化工作。所以一般来说,除非你要重新设置你已经存在的BIO,否则是不需要直接调用这个函数的。成功操作返回1,否则返回0。
【BIO_free】
该函数释放单个BIO的内存和资源,成功操作返回1,失败返回0。BIO的操作不仅仅是释放BIO结构所占用的资源,也会释放其下层的I/O资源,比如关闭释放相关的文件符等,这对不同类型的BIO是不一样的,详细的请参看各种类型BIO本身的说明文件和源文件。需要注意的是,BIO_free只释放当前的一个BIO,如果用来释放一个BIO链,就可能会导致内存泄漏,这种情况应该使用下述的BIO_free_all函数。
【BIO_vfree】
该函数功能与BIO_free完全相同,只是没有返回值。事实上,它简单调用了BIO_free函数,但不返回该函数的返回值,所以它的函数实现代码只有一个语句。
【BIO_free_all】
该函数释放这个BIO链,并且即使在这个过程中,如果释放其中一个BIO出错,释放过程也不会停止,会继续释放下面的BIO,这保证了尽量避免内存泄漏的出现。如果你非要调用这个函数释放单个的BIO,那么效果跟BIO_free是一样的。事实上,该函数只是简单的遍历整个BIO链,并调用BIO_free释放各个环节的BIO。
相关推荐
C语言base64编码解码(基于openssl)
#include <openssl/err.h> #include <openssl/ssl.h> #include <openssl/bio.h> #include <openssl/crypto.h> int base64_encode_by_openssl(char *in_str, int in_len, char *out_s...
Openssl之BIO系列
1.BIO-抽象的IO接口 其实包含了很多种接口,用通用的函数接口,主要控制在BIO_METHOD中的不同实现函数控制,我初步估计了一下,大概有14种,包括4种filter型和10种source/sink型。 BIO是在底层覆盖了许多类型I/O接口细节的一种应用接口,如果你在程序中使用BIO,那么就可以和SSL、非加密的网络以及文件IO进行透明的连接。有两种不通的BIO接口,一种是sour
opensslBIO系列之2---BIO结构和BIO相关文件介绍
BIO结构和BIO相关文件介绍 (作者:DragonKing Mail:wzhah@263.net 发布于:http://gdwzh.126.com openssl专业论坛) BIO的结构定义和相关项解析如下: (包含在bio.h文件中,其主文件为bio_lib.c) typedef struct bio_st BIO; struct bio_st
openssl之BIO系列之11---文件(file)类型BIO
前面我们已经介绍了很多BIO的基本构造和操作,现在,我们开始针对每一个类型BIO进行进一步的介绍,这些介绍都是基本基于openssl的帮助文档的,我尽可能加入自己的一些理解,理清思路。在开始这部分之前,我一直在想该从哪一种类型的BIO开始比较合适,因为这些BIO类型之间有些还是有相互联系的,比如BIO_s_bio型就和BIO_f_ssl有关系,最后,考虑到大家对文件操作都比较熟悉,而且该类型BIO
opensslBIO系列之4---BIO控制函数介绍
BIO控制函数介绍 ---根据openssl doc/crypto/bio/bio_ctrl.pod翻译和自己的理解写成 (作者:DragonKing Mail:wzhah@263.net 发布于:http://gdwzh.126.com openssl专业论坛) BIO控制函数有许多,并且不同的BIO类型还有不同的控制函数,这里只简单介绍一些通用的BIO控制函数,至于
【win11 cuda12.0安装tensorflow-gpu】
win11 cuda 12.0 安装 tensorflow-gpu
OpenSSL中文手册之BIO库详解
这一系文章参考了http://blog.youkuaiyun.com/xiaoting451292510/article/details/466495831 BIO 概述 其实包含了很多种接口,用通用的函数接口,主要控制在BIO_METHOD中的不同实现函数控制,包括6种filter型和8种source/sink型。 source/sink类型的BIO是数据源,例如,sokect BIO和文件BIO。
FDTD Solutions-入射波长模式
经常在文献中看到仿真光源使用TM/TE模式,这个确定是十分必要的,决定了仿真结果。 但是也不能局限于选择TM/TE,因为不同领域、不同软件之间的使用习惯和命名可能不同。并且在现代光波导器件中,几乎全部 都是混合模式,或者称之为quasi-TE(准TE模式)和quasi-TM(准TM模式),多数情况下都简称为TE模式和TM模式。要知道 到底是TE模式还是TM模式,需要查看其电场的主分量(即振幅...
openssl之BIO系列之5---CallBack函数及其控制
CallBack函数及其控制 ---根据openssl doc/crypto/bio/bio_set_callback.pod翻译和自己的理解写成 (作者:DragonKing Mail:wzhah@263.net 发布于:gdwzh.126.com openssl专业论坛) 通过前面的介绍大家已经知道,BIO的callback函数是非常重要的,是实现BIO多态性
从PWM到精准电流:双光耦与LM317构建的4-20mA隔离输出方案
本文详细介绍了基于双光耦与LM317的4-20mA隔离输出方案,适用于工业自动化中的PWM信号转换。该方案通过电气隔离和精准电流调节,显著提升抗干扰能力和信号传输精度,同时降低成本60%。文章还分享了电路设计、参数计算及调试经验,为工程师提供实用参考。
C++跨平台Word文档处理库DuckX实战指南:从原理到项目集成
在C++开发中,处理Office文档,尤其是Word文件,常因缺乏原生易用的库而面临挑战。Office Open XML(OOXML)作为.docx文件的基础标准,其本质是包含XML文件的ZIP压缩包。理解这一原理,开发者便能通过解析和操作XML来实现文档的读写。DuckX库正是基于此,为C++提供了轻量级的解决方案。它封装了底层的ZIP处理和XML解析,提供了简洁的面向对象API,其技术价值在于实现了跨平台、无外部依赖的Word文档自动化生成与处理。这尤其适用于服务器端、嵌入式环境或需要脱离Office软
Openssl之BIO
1.BIO-抽象的IO接口 其实包含了很多种接口,用通用的函数接口,主要控制在BIO_METHOD中的不同实现函数控制,我初步估计了一下,大概有14种,包括4种filter型和10种source/sink型。 BIO是在底层覆盖了许多类型I/O接口细节的一种应用接口,如果你在程序中使用BIO,那么就可以和SSL、非加密的网络以及文件IO进行透明的连接。有两种不通的BIO接口,一种是sour
大数据合规工程师必备的7项核心技能
当我们谈论“大数据”时,往往先想到它的价值——驱动业务增长、优化用户体验、赋能智能决策。大数据的价值越大,其合规风险的“重量”就越重。2023年,全球有超过120个国家出台了数据保护法规,中国《个人信息保护法》《数据安全法》的实施进入深水区,欧盟GDPR的罚款金额屡创新高(最高达全球营收的4%)。企业面临的合规压力,早已从“被动应对监管”升级为“主动构建合规能力”。在这样的背景下,大数据合规工程师。
【转】 Openssl之BIO系列
1.BIO-抽象的IO接口 其实包含了很多种接口,用通用的函数接口,主要控制在BIO_METHOD中的不同实现函数控制,我初步估计了一下,大概有14种,包括4种filter型和10种source/sink型。 BIO是在底层覆盖了许多类型I/O接口细节的一种应用接口,如果你在程序中使用BIO,那么就可以和SSL、非加密的网络以及文件IO进行透明的连接。有两种不通的BIO接口,一
JavaSwing_4.2: JDialog、JOptionPane(对话框)
JDialog,对话框。使用 JDialog 类可以创建自定义有的对话框,或者调用 JOptionPane 中的多个静态方法快速创建各种标准的对话框。JOptionPane是 JavaSwing 内部已实现好的,以静态方法的形式提供调用,能够快速方便的弹出要求用户提供值或向其发出通知的标准对话框。
计算电磁学(三)有限差分方法
有限差分方法(FDM)是一种数值处理方法,通过将偏微分方程变换为一组代数方程,通过求解代数方程组来得到原边值问题的近似值。由于有限差分法非常简单,所以也特别的稳定高效。其中时域有限差分方法(FDTD)是电磁分析中的常用方法。在计算电磁学中,常用有限差分方法(finite difference equations)来替代微分方程。一个有限差分法通常包括三个步骤将求解域划分网格用有限差分方程逼近给定的微分方程求解在给定边界条件和初始状态下的方程常用的网格模型方阵斜方阵三角阵圆形阵。
openssl之BIO系列之2---BIO结构和BIO相关文件介绍
BIO结构和BIO相关文件介绍(作者:DragonKing Mail:wzhah@263.net 发布于:http://gdwzh.126.com openssl专业论坛)BIO的结构定义和相关项解析如下:(包含在bio.h文件中,其主文件为bio_lib.c)typedef struct bio_st BIO;struct bio_st...
starrc: LEF DEF FLOW与full chip flat netlist
SIKP_CELLS默认为"SKIP_CELLS: *"意思是跳过所有ref cell内部的rc提取,仅提取cell之间的互联线的rc,"SKIP_CELLS: *!与MACRO_DEF_FILE搭配使用的还有SKIP_CELLS命令,如果想提取block的寄生参数生成full chip的flat netlist,或者跳过block取执行hier的寄生参数提取都需要用到SKIP_CELLS。此时,macroA和macroB没有被跳过,所以提取其内部的rc,spef中存在两个A和两个B。
openssl之BIO系列之4---BIO控制函数介绍
BIO控制函数介绍 BIO控制函数有许多,并且不同的BIO类型还有不同的控制函数,这里只简单介绍一些通用的BIO控制函数,至于某种类型BIO的特定控制函数,则参考后续的文件。 BIO的通用控制函数有以下几种,其声明如下(openssl/bio.h): long BIO_ctrl(BIO *bp,int cmd,long larg,void *parg);
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
RU DOS版、EFI版32bit/64bit BIOS常用工具
DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。
推荐openssl专业论坛http://gdwzh.126.com
龙腾世界(http://gdwzh.126.com)提供了大量openssl中文专业文档,并且每天有新openssl文章发表。希望建成一个openssl专业人士以及信息安全专业技术人员得交流网站。目前,bio系列文章正在发表中.....大家快去看看:)下面是该网站精华区文章名字列表:标题操作留言人留言时间BIO系列之4---BIO控制函数介绍[收
最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版
Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。
BIO_push()详解
BIO的callback函数是实现BIO多态性的一个关键因素之一。 BIO提供的callback控制系列函数有五个,都是一些宏定义,下面是它的声明和定义(openssl/bio.h): #define BIO_set_callback(b,cb) ((b)->callback=(cb)) #define BIO_get_callback(b)
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
1397



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



