文件描写叙述符(fd)类型BIO

---依据openssl doc\crypto\bio_s_fd.pod翻译和自己的理解写成

(作者:DragonKing Mailwzhah@263.net 公布于:httpgdwzh.126.com之openssl专

业论坛)

文件描写叙述符类型BIO也是一个source/sink型的BIO,它定义了下面一些类型的函数(

openssl\bio.h):

BIO_METHOD * BIO_s_fd(void);

#define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd)

#define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c)

BIO *BIO_new_fd(int fd, int close_flag);

有一点须要说明的是,尽管存在bss_fd.c文件。可是关于fd类型的BIO的实现函数。

并不是真正在bss_fd.c里面,而是在bss_sock.c里面,bss_fd.c这是简单包括了bss_sock

.c文件,所以大家要找实现函数,应该到bss_sock.c里面找。

【BIO_s_fd】

该函数返回一个文件描写叙述符类型的BIO_METHOD结构,它封装了文件描写叙述符类型的一

些规则,如read()和write()函数等。fd类型的BIO_METHOD结构例如以下:

static BIO_METHOD methods_fdp=

{

BIO_TYPE_FD,"file descriptor",

fd_write,

fd_read,

fd_puts,

NULL, /* fd_gets, */

fd_ctrl,

fd_new,

fd_free,

NULL,

};

可见。跟file类型BIO相比,它没有实现gets的方法。以下对一些相同的BIO操作函

数作些简单说明:

BIO_read和BIO_write对底层的文件描写叙述符结构进行读写操作。

这两个函数的一些行

为取决于他们所在的平台的文件描写叙述符的读写函数的行为。假设底层的文件描写叙述符是非

堵塞型的,那么他们基本上是跟我们前面介绍过得BIO的IO操作函数一样的。请參看前面

的文章和资料。

socket是一类特殊的描写叙述符,不应该使用文件描写叙述符类型的BIO来封装它

。而应该使用专门的socke类型BIO,在以后我们会进行介绍。

BIO_puts是支持的,可是BIO_gets在本类型描写叙述符中是不支持的。

假设设置了关闭标志。那么当BIO被释放的时候底层的文件描写叙述符就会被关闭。

BIO_reset调用lseek(fd,0,0)函数,使文件指针指向開始的位置。调用成功返回0,

失败返回-1。

BIO_seek调用了lseek(fd,ofs,0)函数。设置文件指针的位置到从文件头偏移ofs的

位置,成功返回文件指针的位置,失败返回-1。

BIO_tell返回眼下文件指针的位置。它事实上调用了lseek(fd,0,1)函数,失败返回-

1。

【BIO_set_fd】

该函数将BIO的底层文件描写叙述符设置为fd,关闭标志也同一时候做了设置,其含义与文件

类型BIO对应的含义一样。返回1。

【BIO_get_fd】返回对应BIO的底层文件描写叙述符。存于參数c。只是。同一时候也作为返

回值返回。c应该为int *类型的指针。

假设BIO没有初始化。调用该函数将失败,返回-

1。

【BIO_new_fd】

创建并返回一个底层描写叙述符为fd,关闭标志为close_flag的文件描写叙述符类型的BIO。

事实上,该函数依次调用了BIO_s_fd、BIO_new和BIO_set_fd完毕了该功能。该函数假设调

用失败返回NULL。

以下是一个简单的样例:

BIO *out;

out = BIO_new_fd(fileno(stdout), BIO_NOCLOSE);

BIO_printf(out, "Hello World\n");

BIO_free(out);

openssl之BIO系列之12---文件描写叙述符(fd)类型BIO的更多相关文章

  1. Shell下的通配符、特殊符号和文件描写叙述符

    一:通配符 * 代表『 0 个到无穷多个』随意字符 演示样例:找出 /etc/ 底下以 cron 为开头的文件名称的文件 [root@instructor Desktop]# ls /etc/cron ...

  2. linux c 通过文件描写叙述符获取文件名称

    在linux中每一个被打开的文件都会在/proc/self/fd/文件夹中有记录,当中(/proc/self/fd/文件描写叙述符号:这个文件是符号文件)的文件就是文件描写叙述符所相应的文件. 而re ...

  3. 每天进步一点点——Linux中的文件描写叙述符与打开文件之间的关系

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆能够看成是文件,文件又可分为:普通 ...

  4. Linux 文件描写叙述符设置为非堵塞的方法

    通过fcntl设置文件描写叙述符属性 fcntl即F_SETFL,F_GETFL的使用,设置文件的flags,堵塞设置成非堵塞,非堵塞设置成堵塞(这连个在server开发中能够封装为基本函数) 1.获 ...

  5. 进程与进程描写叙述符(task_struct)

    一. 进程 进程(Process) 计算机中的程序关于某数据集合上的一次执行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体: ...

  6. Python描写叙述符(descriptor)解密

    Python中包括了很多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些" ...

  7. 【c++】虚函数描写叙述符override

    在C++11中为了帮助程序猿写继承结构复杂的类型,引入了虚函数描写叙述符override,假设派生类在虚函数声明时使用了override描写叙述符,那么该函数必须重载其基类中的同名函数,否则代码将无法 ...

  8. linux /proc/cpuinfo 文件描写叙述

    processor :系统中逻辑处理核的编号.对于单核处理器.则课觉得是其CPU编号,对于多核处理器则能够是物理核.或者使用超线程技术虚拟的逻辑核 vendor_id :CPU制造商 cpu fami ...

  9. ORA-12514: TNS: 监听程序当前无法识别连接描写叙述符中请求的服务

    不指定数据库能够正常连接: 指定数据库和使用PL/SQL Developer都出现错误: 在此说明一下我的环境:Oralce装的是64位的在使用PL/SQL Developer时曾出现过初始化错误,解 ...

随机推荐

  1. Linux中TTY是什么意思

    终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备.tty是Teletype的缩写.Teletype是最早出现的一种终端 设备,很象电传打字机(或者说就是),是由Telety ...

  2. 如何回答“线上CPU100%排查”面试问题

    案例: public class App { public static void main( String[] args ) { int a = 0; while (a < 100) { a ...

  3. idea报错could not autowired .但是可以正常运行

    转 http://www.cnblogs.com/softidea/p/5763285.html 解决办法: File-->Project Setting-->Facets-->Sp ...

  4. jenkins项目数据位置

    JENKINS_HOME: C:\Documents and Settings\AAA\.jenkins /root/.jenkins jenkins迁移只需要备份JENKINS_HOME的内容即可 ...

  5. 我要好offer之 搜索算法大总结

    1. 二分搜索 详见笔者博文:二分搜索的那些事儿,非常全面 2. 矩阵二分搜索 (1) 矩阵每行递增,且下一行第一个元素大于上一个最后一个元素 (2) 矩阵每行递增,且每列也递增 3. DFS 深度优 ...

  6. ajax cache enable and ajax concurrency!

    Today, forget to close ajax cache which leads to duplicate result from cache as to Jquery, this way, ...

  7. JavaScript基础深入之----参数传递的分析与总结

    JS的数值类型是分为两类:基本数据类型和引用数据类型. 基本类型占据的内存栈空间,引用类型被保存在堆空间.引用类型赋值的变量也是被保存在栈空间的,它的作用类似于电视遥控器,负责操作堆空间内指向的对象. ...

  8. 转 Python爬虫入门一之综述

    转自: http://cuiqingcai.com/927.html 静觅 » Python爬虫入门一之综述 首先爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为 ...

  9. 标准C程序设计七---57

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  10. linux信号-------初涉

    一.信号的本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是进程 ...