openssl之BIO系列之6---BIO的IO操作函数

BIO的IO操作函数

---依据openssl doc/crypto/bio/bio_read.pod翻译和自己的理解写成

(作者:DragonKing Mail:[email protected] 公布于:http://gdwzh.126.com之openssl专业论坛)

这些函数是BIO的基本读写操作函数,包含四个,他们的定义例如以下(openssl/bio.h):

int BIO_read(BIO *b, void *buf, int len);

int BIO_gets(BIO *b,char *buf, int size);

int BIO_write(BIO *b, const void *buf, int len);

int BIO_puts(BIO *b,const char *buf);

【BIO_read】

从BIO接口中读出指定数量字节len的数据并存储到buf中。成功就返回真正读出的数据的长度,失败返回0或-1,假设该BIO没有实现本函数则返回-2。

【BIO_gets】

该函数从BIO中读取一行长度最大为size的数据。通常情况下,该函数会以最大长度限制读取一行数据,可是也有例外,比方digest型的BIO,该函数会计算并返回整个digest信息。

此外,有些BIO可能不支持这个函数。成功就返回真正读出的数据的长度,失败返回0或-1。假设该BIO没有实现本函数则返回-2。须要注意的时,假设对应的BIO不支持这个函数,那么对该函数的调用可能导致BIO链自己主动添加一个buffer型的BIO。

【BIO_write】

往BIO中写入长度为len的数据。成功就返回真正写入的数据的长度。失败返回0或-1,假设该BIO没有实现本函数则返回-2。

【BIO_puts】

往BIO中写入一个以NULL为结束符的字符串,成功就返回真正写入的数据的长度,失败返回0或-1,假设该BIO没有实现本函数则返回-2。

须要注意的是。返回指为0或-1的时候并不一定就是发生了错误。在非堵塞型的source/sink型或其他一些特定类型的BIO中,这只代表眼下没有数据能够读取。须要稍后再进行该操作。

有时候。你可能会使用了堵塞类型的sokect使用的一些系统调用技术(如select,poll,equivalent)来决定BIO中是否有有效的数据被read函数读取,但建议不要在堵塞型的接口中使用这些技术。由于这种情况下假设调用BIO_read就会导致在底层的IO中多次调用read函数。从而导致port堵塞。建议select(或equivalent)应该和非堵塞型的IO一起使用,可以在失败之后可以又一次读取该IO,而不是堵塞住了。

关于BIO的IO操作为什么会失败以及怎么处理这些情况请參加BIO_should_retry()函数的说明文档。

时间: 2024-10-27 09:40:26

openssl之BIO系列之6---BIO的IO操作函数的相关文章

Redis系列-存储篇sorted set主要操作函数小结

redis支持有序集合,即sorted set.sorted set在set的基础上,增加了排序属性,是set的升级版.这里简要谈谈sorted set的常用函数: 1)insert a)  zadd 语法:zadd key score member [[score member] [score member] ...] 解释:增加一个或多个member[根据score排序]到有序集key中,如果member已经存在,只更新score.返回增加member个数,不包含已经存在的member [p

java学习系列(一)Java中的IO操作

Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入\输出操作,在Java中把不同的输入\输出源抽象为"流",通过流的方式允许Java程序使用相同的方式来访问不同的输入/输出源.stream是从起源(source)到接收(sink)的有序数据. Java把所有传统的流类型(类或抽象类)都放在java.io包中,用以实现输入\输出功能. JavaAPI 1.6中java.io包 1.子节流  * 输入字节流 * -------------|InputStream 所有输入字

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

文件描写叙述符(fd)类型BIO ---依据openssl doc\crypto\bio_s_fd.pod翻译和自己的理解写成 (作者:DragonKing [email protected] 公布于:httpgdwzh.126.com之openssl专 业论坛) 文件描写叙述符类型BIO也是一个source/sink型的BIO,它定义了下面一些类型的函数( openssl\bio.h): BIO_METHOD * BIO_s_fd(void); #define BIO_set_fd(b,fd,

openssl之BIO系列之18---接受(accept)类型BIO

接受(accept)类型BIO ---依据openssl doc\crypto\bio_s_accept.pod翻译和自己的理解写成 (作者:DragonKing, Mail: [email protected] ,公布于:http://gdwzh.126.com之o penssl专业论坛) 接受(accept)类型的BIO跟连接(connect)类型BIO是相相应的,它封装了Socke t的accept方法及其相关的一些操作,使得可以对不同的平台使用同一的函数进行操作. 其定义的相关函数例如以

openssl之BIO系列之24---SSL类型的BIO

SSL类型的BIO ---依据openssl doc\crypto\bio_f_ssl.pod翻译和自己的理解写成 (作者:DragonKing, Mail: [email protected] ,公布于:http://openssl.126.com之 openssl专业论坛) 从名字就能够看出,这是一个很重要的BIO类型,它封装了openssl里面的ssl规则 和函数,相当于提供了一个使用SSL非常好的有效工具,一个非常好的助手.其定义(opens sl\bio.h,openssl\ssl.h

openssl之BIO系列之17---连接(connect)类型BIO

连接(connect)类型BIO ---依据openssl doc\crypto\bio_s_connect.pod翻译和自己的理解写成 (作者:DragonKing, Mail: [email protected] ,公布于:http://gdwzh.126.com之o penssl专业论坛) 该类型的BIO封装了socket的Connect方法,它使得编程的时候能够使用统一的BIO规 则进行socket的connect连接的操作和数据的发送接受,而不用关心详细平台的Socket的 conne

openssl之BIO系列之9---BIO对的创建和应用

BIO对的创建和应用 ---依据openssl doc/crypto/bio/bio_new_bio_pair.pod翻译和自己的理解写成 (作者:DragonKing Mail:[email protected] 公布于:http://gdwzh.126.com之open ssl专业论坛) BIO对是BIO中专门创建的一对缓存BIO.要创建BIO对.调用以下定义的函数(open ssl\bio.h): int BIO_new_bio_pair(BIO **bio1, size_t writeb

openssl之BIO系列之22---Cipher类型的BIO

Cipher类型BIO ---依据openssl doc\crypto\bio_f_cipher.pod翻译和自己的理解写成 (作者:DragonKing, Mail: [email protected] ,公布于:http://gdwzh.126.com之o penssl专业论坛) 该类型为过滤(filter)类型BIO.其定义例如以下(openssl\bio.h,openssl\evp.h) : BIO_METHOD * BIO_f_cipher(void); void BIO_set_ci

Android总结篇系列:Activity中几个主要函数详解

专注Android领域开发. 仰望星空,同时需要脚踏实地. ——好记性不如烂博客 Android总结篇系列:Activity中几个主要函数详解 Activity作为Android系统中四大基本组件之一,包含大量的与其他的各大组件.intent.widget以及系统各项服务等之间的交互的函数.在此,本文主要选取实际项目开发中常用的,但完全理解又需要有一定深入了解的几个函数进行讲解,后续本文会根据需要不断更新. 1. startActivityForResult / onActivityResult