标签:用户 计数 shadow ptr 分享图片 bre 引用计数器 计数器 流程
关键结构体
程序清单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;
图3.1 _IoOpen函数
标签:用户 计数 shadow ptr 分享图片 bre 引用计数器 计数器 流程
原文地址:http://blog.51cto.com/11620867/2307698