openssl之BIO系列之20---缓冲(buffer)类型BIO

原创 2003年01月20日 09:42:00
缓冲(buffer)类型BIO
    ---根据openssl doc/crypto/bio_f_buffer.pod翻译和自己的理解写成
    
    (作者:DragonKing, Mail: wzhah@263.net ,发布于:httpgdwzh.126.com之openssl专业论坛)
    
    缓冲(buffer)类型BIO是一种过滤(filter)型的BIO,其相关的一些函数定义如下(openssl/bio.h):
     BIO_METHOD * BIO_f_buffer(void);
     #define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL)
     #define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0)
     #define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1)
     #define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL)
     #define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf)
    【BIO_f_buffer】
    该函数返回一个Buffer类型的BIO_METHOD结构,该结构定义如下(bf_buff.c):
    static BIO_METHOD methods_buffer=
     {
     BIO_TYPE_BUFFER,
     "buffer",
     buffer_write,
     buffer_read,
     buffer_puts,
     buffer_gets,
     buffer_ctrl,
     buffer_new,
     buffer_free,
     buffer_callback_ctrl,
     };
    由结构定义可见,该类型BIO支持所有BIO的I/O函数。写入缓冲(buffer)BIO的数据存储在缓冲区里面,定期写入到BIO链的下一个BIO中,事实上,只有缓冲区已满或者调用了BIO_flush函数时,数据才会写入下面的BIO,所以,当任何存储在缓冲区的数据需要写入的时候(如在使用BIO_pop函数从BIO链中删除一个buffer类型BIO之前),必须使用BIO_flush函数,如果BIO链的末尾是一个非阻塞型的BIO,有时候调用BIO_flush可能出现失败,需要重试的情况。从该类型BIO读取数据时,数据从下一个BIO填充到该BIO的内部缓冲区中,然后再读出来。该类型BIO支持BIO_gets和BIO_puts方法,事实上,BIO_gets函数是通过在下一个BIO的BIO_read函数来实现的,所以,如果一个BIO不支持BIO_gets方法(如SSL类型的BIO),可以通过预先附加一个buffer类型BIO来实现BIO_gets的功能。
    BIO_reset被调用的时候,该类型BIO里面的所有数据都会被清空。
    【BIO_get_buffer_num_lines】
    返回缓冲区中目前数据的的行数。
    【 BIO_set_read_buffer_size、BIO_set_write_buffer_size和 BIO_set_buffer_size】
    这三个函数分别设置缓冲类型BIO的读、写或者读写缓冲区的大小。初始的缓冲区大小由宏定义DEFAULT_BUFFER_SIZE决定,默认的是1024。如果设置的缓冲区大小小于DEFAULT_BUFFER_SIZE,那么就会被忽略,也就是说缓冲区大小会保持为DEFAULT_BUFFER_SIZE所定义的大小。当重新设置缓冲区大小时,里面的数据会全部被清空。成功执行返回1,否则返回0。
    【BIO_set_buffer_read_data】
    该函数清空缓冲区原有的数据,并使用num个buf中的数据填充该缓冲区,如果num的大小大于目前的缓冲区设定大小,那么缓冲区就会自动扩大。成功设置返回1,否则返回0。

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

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

openssl之BIO系列之20---缓冲(buffer)类型BIO

缓冲(buffer)类型BIO     ---根据openssl doc\crypto\bio_f_buffer.pod翻译和自己的理解写成     (作者:DragonKing, Mail: w...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年07月02日 17:48
  • 8039

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
  • 10932

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

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

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

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

openssl框架闲谈--BIO接口

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

openssl之BIO系列之23---MD类型的BIO

MD类型BIO     ---根据openssl doc\crypto\bio_f_md.pod翻译和自己的理解写成     (作者:DragonKing, Mail: wzhah@263.net...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年07月02日 17:49
  • 7382

Java中BIO,NIO和AIO使用样例

转自:http://blog.insanecoder.top/javazhong-bio-niohe-aioshi-yong-yang-li/ 上文中分析了阻塞,非阻塞,同步和异步概念上的区别以...
  • Scythe666
  • Scythe666
  • 2016年07月21日 12:58
  • 1303

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

SSL类型的BIO     ---根据openssl doc\crypto\bio_f_ssl.pod翻译和自己的理解写成     (作者:DragonKing, Mail: wzhah@263....
  • xiaoting451292510
  • xiaoting451292510
  • 2015年07月02日 17:50
  • 8346

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

连接(connect)类型BIO     ---根据openssl doc\crypto\bio_s_connect.pod翻译和自己的理解写成     (作者:DragonKing, Mail:...
  • xiaoting451292510
  • xiaoting451292510
  • 2015年07月02日 17:46
  • 8399
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:openssl之BIO系列之20---缓冲(buffer)类型BIO
举报原因:
原因补充:

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