SylixOS IO系统

  1. 概述

I/O 系统又称作输入输出系统, SylixOS兼容POSIX标准输入输出系统,SylixOS的I/O概念继承了UNIX操作系统的I/O概念,认为一切皆为文件。与UNIX操作系统相同, SylixOS中的文件也分为不同的类型。

SylixOS的I/O系统结构,分为ORIG驱动结构和NEW_1驱动结构。NEW_1驱动结构就是在ORIG驱动结构基础上增加了设备节点结构,其负责文件访问权限、文件记录锁等功能。图1.1为两种驱动结构的对比图。

图1.1 ORIG驱动结构和NEW_1驱动结构对比图

  1. 关键结构体

程序清单2.1 文件节点

typedef struct {

    LW_LIST_LINE               FDNODE_lineManage;   /*  同一设备 fd_node 链表       */

   

    LW_OBJECT_HANDLE           FDNODE_ulSem;    /*  内部操作锁                  */

    dev_t                      FDNODE_dev;            /*  设备                        */

    ino64_t                    FDNODE_inode64;          /*  inode (64bit 为了兼容性)    */

    mode_t                     FDNODE_mode;        /*  文件 mode                   */

    uid_t                      FDNODE_uid;            /*  文件所属用户信息            */

    gid_t                      FDNODE_gid;

   

    off_t                      FDNODE_oftSize;          /*  当前文件大小                */

   

    struct  __fd_lockf        *FDNODE_pfdlockHead;      /*  第一个锁                    */

    LW_LIST_LINE_HEADER        FDNODE_plineBlockQ;   /*  当前有阻塞的记录锁队列   */

   

    BOOL                       FDNODE_bRemove;     /*  是否在文件未关闭时有 unlink */

    ULONG                      FDNODE_ulLock;       /*  锁定, 不允许写, 不允许删除  */

    ULONG                      FDNODE_ulRef;        /*  fd_entry 引用此 fd_node 数量*/

    PVOID                      FDNODE_pvFile;         /*  驱动使用此变量标示文件      */

    PVOID                      FDNODE_pvFsExtern;    /*  文件系统扩展使用            */

} LW_FD_NODE;

typedef LW_FD_NODE            *PLW_FD_NODE;

 

程序清单2.2 文件结构结构体

typedef struct {

    PLW_DEV_HDR                FDENTRY_pdevhdrHdr;   /*  设备头                  */

    PCHAR                      FDENTRY_pcName;        /*  文件名                  */

    PCHAR                      FDENTRY_pcRealName;    /*  去除符号链接的真实文件名 */

    LW_LIST_LINE               FDENTRY_lineManage;     /*  文件控制信息遍历表      */

   

#define FDENTRY_pfdnode        FDENTRY_lValue

    LONG                       FDENTRY_lValue;         /*  驱动程序内部数据         */

                                                     /*  如果为 NEW_1 驱动则为fd_node*/

                                                                       

    INT                        FDENTRY_iType;          /*  文件类型 (根据驱动判断)     */

    INT                        FDENTRY_iFlag;           /*  文件属性                   */

    INT                        FDENTRY_iAbnormity;      /*  文件异常                   */

    ULONG                      FDENTRY_ulCounter;     /*  总引用计数器              */

    off_t                      FDENTRY_oftPtr;            /*  文件当前指针               */

                                                      /*  只有 NEW_1 或更高级驱动使用 */

    BOOL                       FDENTRY_bRemoveReq;  /*  删除请求                  */

} LW_FD_ENTRY;

typedef LW_FD_ENTRY           *PLW_FD_ENTRY;

 

程序清单2.3 文件描述符

typedef struct {

    PLW_FD_ENTRY               FDDESC_pfdentry;    /*  文件结构                    */

    BOOL                       FDDESC_bCloExec;     /*  FD_CLOEXEC               */

    ULONG                      FDDESC_ulRef;        /*  对应文件描述符的引用计数    */

} LW_FD_DESC;

typedef LW_FD_DESC            *PLW_FD_DESC;

 

  1. 流程
  1. _IoOpen函数流程:

 

图3.1 _IoOpen函数

 

  1. 获取完整文件名流程:

图3.2 获取完整文件名流程

  1. 申请文件描述符的大概流程:

图3.3 申请文件描述符流程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值