openssl之BIO系列之6---BIO的IO操作函数
BIO的IO操作函数
---依据openssl doc/crypto/bio/bio_read.pod翻译和自己的理解写成
(作者:DragonKing Mail:wzhah@263.net 公布于: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()函数的说明文档。
openssl之BIO系列之6---BIO的IO操作函数的更多相关文章
- Redis系列-存储篇sorted set主要操作函数小结
redis支持有序集合,即sorted set.sorted set在set的基础上,增加了排序属性,是set的升级版.这里简要谈谈sorted set的常用函数: 1)insert a) zadd ...
- java学习系列(一)Java中的IO操作
Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入\输出操作,在Java中把不同的输入\输出源抽象为"流",通过流的方式允许Java程序使用相同的方式来访问不同的输 ...
- Pandas系列(十一)-文件IO操作
数据分析过程中经常需要进行读写操作,Pandas实现了很多 IO 操作的API,这里简单做了一个列举. 格式类型 数据描述 Reader Writer text CSV read_ csv to_cs ...
- Groovy系列(5)- Groovy IO操作
IO操作 Groovy为I/O操作提供了许多帮助方法,虽然你可以在Groovy中用标准Java代码来实现I/O操作,不过Groovy提供了大量的方便的方式来操作File.Stream.Reader等等 ...
- openssl之BIO系列之12---文件描写叙述符(fd)类型BIO
文件描写叙述符(fd)类型BIO ---依据openssl doc\crypto\bio_s_fd.pod翻译和自己的理解写成 (作者:DragonKing Mailwzhah@263.net 公布于 ...
- openssl之BIO系列之18---接受(accept)类型BIO
接受(accept)类型BIO ---依据openssl doc\crypto\bio_s_accept.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.n ...
- openssl之BIO系列之9---BIO对的创建和应用
BIO对的创建和应用 ---依据openssl doc/crypto/bio/bio_new_bio_pair.pod翻译和自己的理解写成 (作者:DragonKing Mail:wzhah@263. ...
- openssl之BIO系列之22---Cipher类型的BIO
Cipher类型BIO ---依据openssl doc\crypto\bio_f_cipher.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.net , ...
- openssl之BIO系列之20---缓冲(buffer)类型BIO
缓冲(buffer)类型BIO ---依据openssl doc\crypto\bio_f_buffer.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.n ...
随机推荐
- 1112 KGold
给出N个人在0时刻的财富值M[i](所有人在0时刻的财富互不相等),以及财富增长速度S[i],随着时间的推移,某些人的财富值会超越另外一些人.如果时间足够长,对于财富增长最快的人来说,他的财富将超越所 ...
- javascript中的正则示例
// 方式一var obj_re = new RegExp("\d+","gi"); //g 全局,i 不区分大小写obj_re.test("fasf ...
- KVO VS isa : KVO 建立在 KVC 之上
Key-Value Observing (KVO) 建立在 KVC 之上,它通过重写 KVC 和监听 setter 方法,向外发送通知. https://blog.csdn.net/y55091811 ...
- Node_进阶_7
Node进阶第七天 一.复习 一.索引 数据库中,根据一个字段的值,来寻找一个文档,是很常见的操作.比如根据学号来找一个学生.这个学号是唯一的.只要有学号,就能唯一确认一个学生的文档.学号这个属性 ...
- Promise语法
转自:廖雪峰的官方网站 在JavaScript的世界中,所有代码都是单线程执行的. 由于这个“缺陷”,导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行.异步执行可以用回调函数实现: ...
- Maven命令下载源码和javadocs
1:Maven命令下载源码和javadocs 当在IDE中使用Maven时如果想要看引用的jar包中类的源码和javadoc需要通过maven命令下载这些源码,然后再进行引入,通过mvn命令能够容易的 ...
- C#-类 字段 属性 方法 特性
方法的签名 包括参数个数.参数类型.方法返回值 base和this关键字 1.使用base关键字,就可以使用父类中的字段.属性.方法 2.一旦父类中存在有参数的构造函数,那么子类就必须使用base来覆 ...
- 一个leetcode解题报告类目,代码很简洁
http://bookshadow.com/leetcode/ 里面的代码很简洁.可以看.
- nj11--http
概念:Node.js提供了http模块.其中封装了一个高效的HTTP服务器和一个建议的HTTP客户端. http.server是一个基于事件的HTTP服务器.内部有C++实现.接口由JavaScrip ...
- Can not Stop-Computer in powershell 6.0
1 PS C:\Program Files\PowerShell\6.0.0-beta.6> Stop-ComputerStop-Computer : Failed to stop the co ...