⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ul_inode.h

📁 类似Linux操作系统0.11版文件系统的文件系统设计和Windows下的操作程序
💻 H
字号:
/*
 * UNIX Like (UL)文件系统 inode 处理模块
 */

#pragma once
#include "UL_FileSys.h"


// i 节点数据结构中i_mode 字段的各标志位。
#define I_TYPE		0170000		// 指明i 节点类型。
#define I_DIRECTORY 0040000	// 是目录文件。
#define I_REGULAR	0100000	// 常规文件,不是目录文件或特殊文件。
#define I_BLOCK_SPECIAL 0060000	// 块设备特殊文件。
#define I_CHAR_SPECIAL 0020000	// 字符设备特殊文件。
#define I_NAMED_PIPE 0010000	// 命名管道。
#define I_SET_UID_BIT 0004000	// 在执行时设置有效用户id 类型。
#define I_SET_GID_BIT 0002000	// 在执行时设置有效组id 类型。

// 磁盘上的索引节点(i 节点)数据结构
struct d_inode
{
	unsigned short i_mode;		// 文件类型和属性(rwx 位)
	unsigned short i_uid;		// 用户id(文件拥有者标识符)
	unsigned long i_size;		// 文件大小(字节数)
	unsigned long i_time;		// 修改时间(自1970.1.1:0 算起,秒)
	unsigned char i_gid;		// 组id(文件拥有者所在的组)
	unsigned char i_nlinks;		// 链接数(多少个文件目录项指向该i 节点)
	unsigned short i_zone[9];	// 直接(0-6),间接(7)或双重间接(8)逻辑块号
};

// 这是在内存中的i 节点结构前7 项与d_inode 完全一样
struct m_inode
{
	unsigned short i_mode;		// 文件类型和属性(rwx 位)
	unsigned short i_uid;		// 用户id(文件拥有者标识符)
	unsigned long i_size;		// 文件大小(字节数)
	unsigned long i_mtime;		// 修改时间(自1970.1.1:0 算起,秒)
	unsigned char i_gid;		// 组id(文件拥有者所在的组)
	unsigned char i_nlinks;		// 文件目录项链接数
	unsigned short i_zone[9];	// 直接(0-6),间接(7)或双重间接(8)逻辑块号

	struct task_struct *i_wait;	// 等待该i 节点的进程
	unsigned long i_atime;		// 最后访问时间
	unsigned long i_ctime;		// i 节点自身修改时间
	unsigned short i_dev;		// i 节点所在的设备号
	unsigned short i_num;		// i 节点号
	unsigned short i_count;		// i 节点被使用的次数,0 表示该i 节点空闲
	unsigned char i_lock;		// 锁定标志
	unsigned char i_dirt;		// 已修改(脏)标志
	unsigned char i_pipe;		// 管道标志
	unsigned char i_mount;		// 安装标志
	unsigned char i_seek;		// 搜寻标志(lseek 时)
	unsigned char i_update;		// 更新标志
};

extern struct m_inode inode_table[NR_INODE];	// 定义i 节点表数组(32 项)

extern void sync_inodes (void);
extern void free_inode (struct m_inode *inode);
extern struct m_inode *new_inode (int dev);
extern struct m_inode *iget (int dev, int nr);
extern void iput (struct m_inode *inode);
extern int bmap (struct m_inode *inode, int block);
extern int create_block (struct m_inode *inode, int block);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -