SylixOS I/O系统

  1. 概述
    I/O 系统又称作输入输出系统, SylixOS兼容POSIX标准输入输出系统,SylixOS的I/O概念继承了UNIX操作系统的I/O概念,认为一切皆为文件。与UNIX操作系统相同, SylixOS中的文件也分为不同的类型。
    SylixOS的I/O系统结构,分为ORIG驱动结构和NEW_1驱动结构。NEW_1驱动结构就是在ORIG驱动结构基础上增加了设备节点结构,其负责文件访问权限、文件记录锁等功能。图1.1为两种驱动结构的对比图。
    SylixOS  I/O系统
    图1.1 ORIG驱动结构和NEW_1驱动结构对比图
  2. 关键结构体
    程序清单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. 流程
  2. _IoOpen函数流程:
    SylixOS  I/O系统

图3.1 _IoOpen函数

  1. 获取完整文件名流程:
    SylixOS  I/O系统
    图3.2 获取完整文件名流程
  2. 申请文件描述符的大概流程:
    SylixOS  I/O系统
    图3.3 申请文件描述符流程

转载于:https://blog.51cto.com/11620867/2307698

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值