博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mozilla的分层IO架构
阅读量:5792 次
发布时间:2019-06-18

本文共 1286 字,大约阅读时间需要 4 分钟。

mozilla的IO实现是分层的,本质上和BIO是一样的,只是写法不同罢了,最上层,mozilla封装了一个结构体:

struct PRFileDesc {

    const PRIOMethods *methods;         //本层的IO函数的实现

    PRFilePrivate *secret;              

    PRFileDesc *lower, *higher;         //上下两层,如此所有的层次可以三个三个连成链表

    void (PR_CALLBACK *dtor)(PRFileDesc *fd);

    PRDescIdentity identity;            //标识

};

关于mozilla对分层io描述符的实现请参考nsprpub/pr/src/io/prio.c和nsprpub/pr/src/io/prlayer.c,特别值得一提的是最具有代表性的push操作:

PR_IMPLEMENT(PRStatus) PR_PushIOLayer(PRFileDesc *stack, PRDescIdentity id, PRFileDesc *fd)

{

    PRFileDesc *insert = PR_GetIdentitiesLayer(stack, id);

    if (stack == insert) {  //插入在当前IO栈的顶端

        PRFileDesc copy = *stack;

        *stack = *fd;

        *fd = copy;

        fd->higher = stack;

        stack->lower = fd;

        stack->higher = NULL;

    } else {  //插入在当前IO栈的任意位置

        fd->lower = insert;

        fd->higher = insert->higher;

        insert->higher->lower = fd;

        insert->higher = fd;

    }

    return PR_SUCCESS;

}

和OpenSSL的BIO_push是十分类似的,只是BIO_push只能在顶端push,是真正的push,而mozilla的实现命名为insert倒是更好。类似的,PR_CreateIOLayerStub和OpenSSL的BIO_new很类似,都是初始化一个新的“要插入”的io描述符,BIO_next在mozilla中直接通过结构体引用,即fd->lower,BIO中的BIO_METHOD实现了本层的io策略,而mozilla的prio实现中的PRIOMethods起着同样的作用。

     通过使用PRFileDesc以及prio所提供的众接口,你可以将一系列的io例程堆积在一起,形成一个io栈,这就是分层的思想。分层的IO可以很方便的加入任何自定义的过滤策略和数据加工策略。突然想到,windows操作系统的drivers目录下有一个叫做tcpip.sys的文件,而unix在/dev目录下亦有一个ip,tcp文件。

本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271799

转载地址:http://dbzfx.baihongyu.com/

你可能感兴趣的文章
mysql-error 1236
查看>>
sshd_config设置参数笔记
查看>>
循序渐进Docker(一)docker简介、安装及docker image管理
查看>>
jsp页面修改后浏览器中不生效
查看>>
大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(四)高效的后台权限判断处理...
查看>>
信号量实现进程同步
查看>>
Spring4-自动装配Beans-通过构造函数参数的数据类型按属性自动装配Bean
查看>>
win10.64位wnmp-nginx1.14.0 + PHP 5. 6.36 + MySQL 5.5.59 环境配置搭建 结合Thinkphp3.2.3
查看>>
如何查看python selenium的api
查看>>
Python_Mix*random模块,time模块,sys模块,os模块
查看>>
iframe刷新问题
查看>>
数据解码互联网行业职位
查看>>
我所见的讲的最容易理解,逻辑最强的五层网络模型,来自大神阮一峰
查看>>
js实现复选框的操作-------Day41
查看>>
数据结构化与保存
查看>>
chrome浏览器开发者工具之同步修改至本地
查看>>
debian7 + wheezy + chromium + flashplayer
查看>>
AOP
查看>>
进阶开发——文档,缓存,ip限速
查看>>
vue中子组件需调用父组件通过异步获取的数据
查看>>