zoukankan      html  css  js  c++  java
  • 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()函数的说明文档。

  • 相关阅读:
    【命令】yum命令
    【程序包管理】篇章3:CentOS平台下软件包安装方法总结
    【程序包管理】篇章2:rpm程序包来源合法和完整性验正
    【命令】gunzip命令
    【程序包管理】篇章1:程序包管理的基础知识(了解,了解了之后会让我们对程序包的安装很有帮助)
    【命令】man命令帮助文档详解
    【基础】系统关机、重启、注销详解
    kali源更新
    第二届强网杯wp
    Jarvis OJ [XMAN]level1 write up
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7043822.html
Copyright © 2011-2022 走看看