我一直在查看使用OpenSSL的示例代码,在我找到的每个示例中,创建者都选择使用BIO_printf()将内容写入stdout而不是printf().
我已经取了他们的代码,删除了openssl/bio.h头文件声明,并将对BIO_printf()的所有调用都更改为常规printf()语句.这些程序的运行结果相同.
我正在掌握的问题是为什么这些编码器使用BIO_printf()时需要更多的设置而不仅仅是使用printf().您必须包含另一个标头(这将增加程序大小),您需要将文件指针设置为您要写入的流.然后,您可以将消息打印到stdout.它似乎比使用printf()复杂得多.
当我在BIO_printf()上搜索时,它列出了BIO_printf(3)的可能的手册页,但没有一个页面实际包含任何信息!
我决定对这两种方法进行基准测试.我循环了printf("Hey\n");1,000,000次.然后我做了BIO_printf(fp, "Hey\n");.我只定时BIO_printf()语句,而不是设置文件指针(这会增加时间).printf()的差异比使用BIO_printf()快4.7倍.
他们为什么要用它?有什么好处?我的理解是,在编程中你要么想要简单或高效的代码,而在BIO_printf()的情况下它既不是.
一般来说,BIO 可能不会写入标准输出。
你可以有一个写入文件的 BIO,或者 null,或者套接字,或者网络驱动器,或者另一个 BIO,等等。
通过使用 BIO_printf 系列,可以轻松更改代码以将其输出发送到不同的位置或另一个 BIO,该 BIO 可能会进行一些进一步的过滤,然后将输出传递到其他位置。
| 归档时间: |
|
| 查看次数: |
3079 次 |
| 最近记录: |