openssl之BIO系列之12---文件描述符(fd)类型BIO

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   阅读详情
    文件描述符类型BIO也是一个source/sink型的BIO,它定义了以下一些类型的函数(openssl/bio.h):
     BIO_METHOD * BIO_s_fd(void);
     #define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd)
     #define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c)
     BIO *BIO_new_fd(int fd, int close_flag);
    有一点需要说明的是,虽然存在bss_fd.c文件,但是关于fd类型的BIO的实现函数,并非真正在bss_fd.c里面,而是在bss_sock.c里面,bss_fd.c这是简单包含了bss_sock.c文件,所以大家要找实现函数,应该到bss_sock.c里面找。
    【BIO_s_fd】
    该函数返回一个文件描述符类型的BIO_METHOD结构,它封装了文件描述符类型的一些规则,如read()和write()函数等。fd类型的BIO_METHOD结构如下:
    static BIO_METHOD methods_fdp=
     {
          BIO_TYPE_FD,"file descriptor",
          fd_write,
          fd_read,
          fd_puts,
          NULL, /* fd_gets, */
          fd_ctrl,
          fd_new,
          fd_free,
          NULL,
     };
    可见,跟file类型BIO相比,它没有实现gets的方法。下面对一些同样的BIO操作函数作些简单说明:
    BIO_read和BIO_write对底层的文件描述符结构进行读写操作。这两个函数的一些行为取决于他们所在的平台的文件描述符的读写函数的行为,如果底层的文件描述符是非阻塞型的,那么他们基本上是跟我们前面介绍过得BIO的IO操作函数一样的。请参看前面的文章和资料。socket是一类特殊的描述符,不应该使用文件描述符类型的BIO来封装它,而应该使用专门的socke类型BIO,在以后我们会进行介绍。
    BIO_puts是支持的,但是BIO_gets在本类型描述符中是不支持的。
    如果设置了关闭标志,那么当BIO被释放的时候底层的文件描述符就会被关闭。
    BIO_reset调用lseek(fd,0,0)函数,使文件指针指向开始的位置。调用成功返回0,失败返回-1。
    BIO_seek调用了lseek(fd,ofs,0)函数,设置文件指针的位置到从文件头偏移ofs的位置,成功返回文件指针的位置,失败返回-1。
    BIO_tell返回目前文件指针的位置,它其实调用了lseek(fd,0,1)函数,失败返回-1。
    【BIO_set_fd】
    该函数将BIO的底层文件描述符设置为fd,关闭标志也同时做了设置,其含义与文件类型BIO相应的含义一样。返回1。
    【BIO_get_fd】返回相应BIO的底层文件描述符,存于参数c,不过,同时也作为返回值返回。c应该为int *类型的指针。如果BIO没有初始化,调用该函数将失败,返回-1。
    【BIO_new_fd】
    创建并返回一个底层描述符为fd,关闭标志为close_flag的文件描述符类型的BIO。其实,该函数依次调用了BIO_s_fd、BIO_new和BIO_set_fd完成了该功能。该函数如果调用失败返回NULL。
    下面是一个简单的例子:
     BIO *out;
     out = BIO_new_fd(fileno(stdout), BIO_NOCLOSE);
     BIO_printf(out, "Hello World/n");

     BIO_free(out);


FW : http://blog.youkuaiyun.com/gdwzh/article/details/19211

智能车视觉算法实战:十字路口与弯道拐点的精准识别 本文深入探讨了智能车视觉导航中十字路口与弯道拐点的精准识别算法。通过实战经验,详细解析了如何利用纵向巡线法生成边界数组,并从中高效提取“上拐点”与“下拐点”的关键特征。文章重点分享了提升算法鲁棒性的核心技巧,包括图像预处理、ROI设置、状态机应用及多特征融合,旨在帮助开发者实现智能车在复杂路况下从“看见”到“看懂”的稳定决策。 阅读详情

相关推荐

STM32无线遥控小车的设计

基于SPI通信的无线摇杆小车的设计

weixin_69414084的博客 2927

openssl bio 转化为内存

[root@VM-0-16-centos openssl]# cat g.c #include<stdio.h> #include<openssl/bio.h> int main() { int n = 0; char *p = NULL; BIO *mem = BIO_new(BIO_s_mem()); BIO_puts(mem, "123"); BIO_puts(mem, "456"); ...

guokaer的专栏 359

射频总集篇:(不断更新)

射频每一章涉及到的重点理论/设计方法 CHAPTER 1 传输线理论 输入阻抗Zin,负载阻抗ZL,驻波比ρ,反射系数 CHAPTER 2 波导 矩形波导,圆波导,同轴线 CHAPTER 3 微型带状传输线 微带线的参数设计,带状线的参数设计 CHAPTER 4 ...

jieyannn的博客 1919

OpenSSL BIO源码简析

OpenSSL BIO源码简析

Starr 1858

Spring Boot 微服务 API 网关实战:Spring Cloud Gateway 整合,搞定路由转发 + 统一认证 + 限流熔断(企业级落地)

摘要:本文详细介绍了SpringCloud Gateway在微服务架构中的核心作用与实现方案。作为API网关,它解决了服务入口分散、认证冗余、流量失控等痛点,提供路由转发、统一认证、限流熔断等能力。文章通过图书管理系统案例,演示了SpringBoot整合Gateway的全流程,包括基础路由配置、JWT全局认证、局部参数校验、Sentinel限流熔断以及Nacos动态路由等核心功能实现。特别强调了企业级落地中的关键注意事项,如路由顺序、过滤器执行顺序、HTTPS配置等。该方案能有效构建统一、安全、高效的微服务

lamehsl的专栏 1381

MODBUS通讯不求人:手把手教你用三菱FX2N控制士林变频器

本文详细介绍了如何使用三菱FX2N PLC通过MODBUS协议控制士林变频器,涵盖硬件连接、参数配置、程序设计及通讯优化等关键步骤。特别针对没有内置MODBUS函数块的老款PLC,提供了CRC校验和稳定数据交换的实用解决方案,帮助工程师快速实现工业自动化设备的高效通讯。

v4w5x6的博客 226

《openssl编程》之BIO

第七章   抽象IO 7.1    openssl抽象IO openssl抽象IO(I/O abstraction,即BIO)是openssl对于io类型的抽象封装,包括:内存、文件、日志、标准输入输出、socket(TCP/UDP)、加/解密、摘要和ssl通道等。Openssl BIO通过回调函数为用户隐藏了底层实现细节,所有类型的bio的调用大体上是类似的。Bio中的数据能从一个B

liujiayu2的专栏 5343

整车CAN网络错误帧排查方法

本文围绕 CAN 总线错误帧展开,先剖析其产生原因,涵盖物理连接与硬件问题、电磁兼容性问题、总线负载与设计问题及配置问题;再阐述位错误、填充错误等 5 类错误帧类型;接着说明错误帧与总线 BUSOFF 的关系,解析主动 / 被动错误状态及 BUSOFF 的触发与恢复;还结合整车故障案例做实际分析,指出错误帧根源多为线束或控制器问题。最后总结,强调错误帧是 CAN 协议保障高鲁棒性的机制,掌握相关知识助工程师提升 CAN 网络处理能力。

车载网络小D的博客 1247

openssl之BIO系列之8---读写出错控制

发信站: BBS 水木清华站 (Wed Dec 25 11:02:08 2002), 转信   读写出错控制     ---根据openssl doc/crypto/bio/bio_should_retry.pod翻译和自己的理解写成     (作者:DragonKing Mail:wzhah@263.net 发布于:http://gdwzh.126.com之open ssl专业论坛)

潇汀 9463

Fluent实战——残差震荡分析与收敛优化策略

本文深入探讨了Fluent仿真中残差震荡的成因与优化策略。残差震荡是流场物理或数值问题的关键信号,文章系统分析了网格质量、边界条件、物理模型非定常性及求解设置四大主因,并提供了库朗数与松弛因子的调参心法,以及针对超音速流、共轭传热等典型场景的实战优化方案,旨在帮助用户有效提升计算收敛性与结果可靠性。

w1x2y3的博客 313

图像标注神器:完全开源免费的多功能标注工具Labelme详解

Labelme是MIT开发的免费开源图像标注工具,支持多边形、矩形等多种标注类型,适用于目标检测、分割等计算机视觉任务。提供Windows可执行文件和Python安装两种方式,可输出JSON格式并转换为COCO等标准数据集。具有跨平台、功能全面、社区活跃等优势,能显著提升标注效率,是AI视觉项目的重要数据准备工具。

数字人生 528

openssl之BIO系列之15---内存(mem)类型BIO

mem类型BIO     ---根据openssl doc\crypto\bio_s_mem.pod翻译和自己的理解写成     (作者:DragonKing, Mail: wzhah@263.net ,发布于:http://gdwzh.126.com之open ssl专业论坛)     内存(mem)类型BIO所定义的相关系列函数如下(openssl\bio.h):      BIO_

潇汀 2万+

Open3D 点云重叠区域检测【2025最新版】

本文介绍了一种基于八叉树和KD树的点云重叠区域检测方法。算法提供两种检测模式:八叉树(快速)和KD树(精确),支持可视化显示和详细统计信息输出。实现功能包括边界扩展、索引去重、精度调节等,可通过max_depth参数控制八叉树细分程度,distance_threshold调整检测精度。代码使用Open3D库,能自动计算并显示各点云的重叠比例和点数统计,最终结果以不同颜色区分重叠与非重叠区域。该方案适用于三维点云数据处理中的重叠分析任务。

点云侠的博客 598

openssl之BIO系列之13---Socket类型BIO

Socket类型BIO        ---根据openssl doc/crypto/bio_s_socket.pod翻译和自己的理解写成        (作者:DragonKing Mailwzhah@263.net 发布于:httpgdwzh.126.com之openssl专业论坛)        Socket类型的BIO也是一种source/sink型BIO,封装了Socket的IO操作,它

内网安全与OpenSSL专栏 3569

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

openssl中BIO的使用

本文主要介绍了BIO的结构和使用方法,并以示例方式给出了一种对BIO的封装,可为下一步与socket的相关操作结合,编写自定义的“加密/解密流”。

guxch的专栏 1412

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OpenSSL BIO

BIO 本质是一个多态的 I/O 抽象层。通过BIO_METHOD来封装各种数据源,BIO 结构体维护状态和数据链表。BUF_MEM。

loca1h0st 1434

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

openssl之BIO系列之10---BIO链的定位操作

BIO链的定位操作     ---根据openssl doc/crypto/bio/bio_find_type.pod翻译和自己的理解写成          (作者:DragonKing Mail:wzhah@263.net 发布于:http://gdwzh.126.com之openssl专业论坛)          前面的一篇文章讲过BIO链的构造方法,这里讲的是在一个BIO链中,怎么

潇汀 8184

openssl BIO

struct bio_method_st { int type; char *name; int (*bwrite) (BIO *, const char *, size_t, size_t *); int (*bwrite_old) (BIO *, const char *, int); int (*bread) (BIO *, char *, size_t, size_t *); int (*bread_old) (BIO *, char *, int);

jingshaoyou的博客 446

openssl之BIO系列之12---文件描写叙述符(fd)类型BIO

文件描写叙述符(fd)类型BIO     ---依据openssl doc\crypto\bio_s_fd.pod翻译和自己的理解写成     (作者:DragonKing Mailwzhah@263.net 公布于:httpgdwzh.126.com之openssl专 业论坛)     文件描写叙述符类型BIO也是一个source/sink型的BIO,它定义了下面一些类型的函数(...

weixin_33958366的博客 184

OpenSSL的SSL/BIO_get_fd

只要是用到了OpenSSL,总会碰到让人心塞的事。这次是SSL_get_fd。我用一种很简单的方式创建了一个SSL对象,直接在这个对象上进行SSL的accept:bio = BIO_new(BIO_s_accept()); BIO_set_accept_port(bio, "1234"); BIO_do_accept(bio); SSL_set_bio(ssl, bio, bio); SSL_ac

TCP/IP 4705

openssl bio

openssl bio例子

ughome的专栏 781
上一篇: openssl之BIO系列之11---文件(file)类型BIO
下一篇: openssl之BIO系列之13---Socket类型BIO
coo1fish
博客等级 码龄14年 22粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值