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

原创 2002年12月26日 09:29:00
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函数,从而导致端口阻塞。建议select(或equivalent)应该和非阻塞型的IO一起使用,可以在失败之后能够重新读取该IO,而不是阻塞住了。
    关于BIO的IO操作为什么会失败以及怎么处理这些情况请参加BIO_should_retry()函数的说明文档。

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

BIO的IO操作函数     ---根据openssl doc/crypto/bio/bio_read.pod翻译和自己的理解写成          (作者:DragonKing Mail:wz...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年06月26日 14:18
  • 23852

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

这些函数是BIO的基本读写操作函数,包括四个,他们的定义如下(openssl/bio.h):      int BIO_read(BIO *b, void *buf, int len);     ...
  • fryingpan
  • fryingpan
  • 2014年10月22日 10:17
  • 326

openssl之BIO系列之1---抽象的IO接口

BIO-抽象的IO接口          (作者:DragonKing Mail:wzhah@263.net 发布于:http://gdwzh.126.com openssl专业论坛)     ...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年06月26日 14:14
  • 22887

opensslBIO系列之2---BIO结构和BIO相关文件介绍

BIO结构和BIO相关文件介绍     (作者:DragonKing Mail:wzhah@263.net 发布于:http://gdwzh.126.com openssl专业论坛)      ...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年06月26日 14:15
  • 23542

openssl之BIO系列之11---文件(file)类型BIO

文件(file)类型BIO     ---根据openssl doc/crypto/bio/bio_s_file.pod翻译和自己的理解写成     (作者:DragonKing Mail:wzh...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年07月02日 17:42
  • 8493

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

连接(connect)类型BIO     ---根据openssl doc\crypto\bio_s_connect.pod翻译和自己的理解写成     (作者:DragonKing, Mail:...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年07月02日 17:46
  • 8402

opensslBIO系列之4---BIO控制函数介绍

BIO控制函数介绍     ---根据openssl doc/crypto/bio/bio_ctrl.pod翻译和自己的理解写成          (作者:DragonKing Mail:wzh...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年06月26日 14:17
  • 23712

openssl框架闲谈--BIO接口

在 OpenSSL中一共有两种类型的BIO,一种是源/目的类型的,另一种是过滤类型的,其实可以统一到一种类型,那就是统一都是过滤类型,这种说法的前提 是一个古老的概念,早在unix时代,人们通常将程序...
  • qeshining
  • qeshining
  • 2015年10月16日 16:22
  • 424

openssl之BIO系列之5---CallBack函数及其控制

CallBack函数及其控制     ---根据openssl doc/crypto/bio/bio_set_callback.pod翻译和自己的理解写成          (作者:Dragon...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年06月26日 14:18
  • 22735

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

mem类型BIO     ---根据openssl doc\crypto\bio_s_mem.pod翻译和自己的理解写成     (作者:DragonKing, Mail: wzhah@263.n...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年07月02日 17:45
  • 10948
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:openssl之BIO系列之6---BIO的IO操作函数
举报原因:
原因补充:

(最多只允许输入30个字)