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

📄 ul_filesys.h

📁 类似Linux操作系统0.11版文件系统的文件系统设计和Windows下的操作程序
💻 H
字号:
/*
 * UNIX Like (UL)文件系统各主要定义
 */
#pragma once

#define READ 0
#define WRITE 1
#define READA 2	
#define WRITEA 3

void buffer_init (long buffer_end);

#define MAJOR(a) (((unsigned)(a))>>8)	// 取高字节(主设备号)
#define MINOR(a) ((a)&0xff)	// 取低字节(次设备号)


#define NAME_LEN (14+240)		// 名字长度值
#define ROOT_INO 1		// 根i 节点

#define I_MAP_SLOTS 8		// i 节点位图槽数
#define Z_MAP_SLOTS 8		// 逻辑块位图槽数

#define SUPER_MAGIC 0x231	// 文件系统魔数。

#define NR_OPEN 20		// 打开文件数
#define NR_INODE 32
#define NR_FILE 64
#define NR_SUPER 8
#define NR_HASH 307
#define NR_BUFFERS 1024
#define BLOCK_SIZE 1024		// 数据块长度
#define BLOCK_SIZE_BITS 10	// 数据块长度所占比特位数

// 每个逻辑块可存放的i 节点数
#define INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct d_inode)))

// 每个逻辑块可存放的目录项数
#define DIR_ENTRIES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct dir_entry)))

typedef char buffer_block[BLOCK_SIZE];	// 块缓冲区

#define CURRENT_TIME ((unsigned long)time(0))


// 文件类型:
#define S_IFMT 00170000		// 文件类型(8 进制表示)。
#define S_IFREG 0100000		// 常规文件。
#define S_IFDIR 0040000		// 目录文件。

// 文件属性位:
#define S_ISUID 0004000		// 执行时设置用户ID(set-user-ID)。
#define S_ISGID 0002000		// 执行时设置组ID。
#define S_ISVTX 0001000		// 对于目录,受限删除标志。

#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)	// 测试是否常规文件。
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)	// 是否目录文件。


extern struct m_inode* current_pwd;	// 当前工作目录
extern struct m_inode* current_root;	// 当前根目录


extern int test_bit(unsigned short bitnr, char *addr);
extern int set_bit(unsigned short bitnr, char *addr);
extern int clear_bit(unsigned short bitnr, char *addr);
extern int find_first_zero(char *addr);



extern struct super_block super_block[NR_SUPER];	// 超级块数组(8 项)

extern inline unsigned char get_byte (const char *addr)
{
	return (unsigned char)(*addr);
}
extern inline void put_byte (char val, char *addr)
{
	*addr = val;
}

struct task_struct
{

};


/*
//// 磁盘操作函数原型
// 检测驱动器中软盘是否改变
extern void check_disk_change (int dev);
// 检测指定软驱中软盘更换情况如果软盘更换了则返回1,否则返回0
extern int floppy_change (unsigned int nr);
// 设置启动指定驱动器所需等待的时间(设置等待定时器)
extern int ticks_to_floppy_on (unsigned int dev);
// 启动指定的软盘驱动器
extern void floppy_on (unsigned int dev);
// 关闭指定的软盘驱动器
extern void floppy_off (unsigned int dev);
//// 以下是文件系统操作管理用的函数原型
// 将i 节点指定的文件截为0
extern void truncate (struct m_inode *inode);
// 刷新i 节点信息
extern void sync_inodes (void);
// 等待指定的i 节点
extern void wait_on (struct m_inode *inode);
// 逻辑块(区段,磁盘块)位图操作取数据块block 在设备上对应的逻辑块号
extern int bmap (struct m_inode *inode, int block);
// 创建数据块block 在设备上对应的逻辑块,并返回在设备上的逻辑块号
extern int create_block (struct m_inode *inode, int block);
// 获取指定路径名的i 节点号
extern struct m_inode *namei (const char *pathname);
// 根据路径名为打开文件操作作准备
extern int open_namei (const char *pathname, int flag, int mode,
struct m_inode **res_inode);
// 释放一个i 节点(回写入设备)
extern void iput (struct m_inode *inode);
// 从设备读取指定节点号的一个i 节点
extern struct m_inode *iget (int dev, int nr);
// 从i 节点表(inode_table)中获取一个空闲i 节点项
extern struct m_inode *get_empty_inode (void);
// 获取(申请一)管道节点返回为i 节点指针(如果是NULL 则失败)
extern struct m_inode *get_pipe_inode (void);
// 在哈希表中查找指定的数据块返回找到块的缓冲头指针
extern struct buffer_head *get_hash_table (int dev, int block);
// 从设备读取指定块(首先会在hash 表中查找)
extern struct buffer_head *getblk (int dev, int block);
// 读/写数据块
extern void ll_rw_block (int rw, struct buffer_head *bh);
// 释放指定缓冲块
extern void brelse (struct buffer_head *buf);
// 读取指定的数据块
extern struct buffer_head *bread (int dev, int block);
// 读4 块缓冲区到指定地址的内存中
extern void bread_page (unsigned long addr, int dev, int b[4]);
// 读取头一个指定的数据块,并标记后续将要读的块
extern struct buffer_head *breada (int dev, int block, ...);
// 向设备dev 申请一个磁盘块(区段,逻辑块)返回逻辑块号
extern int new_block (int dev);
// 释放设备数据区中的逻辑块(区段,磁盘块)block复位指定逻辑块block 的逻辑块位图比特位
extern void free_block (int dev, int block);
// 为设备dev 建立一个新i 节点,返回i 节点号
extern struct m_inode *new_inode (int dev);
// 释放一个i 节点(删除文件时)
extern void free_inode (struct m_inode *inode);
// 刷新指定设备缓冲区
extern int sync_dev (int dev);
// 读取指定设备的超级块
extern struct super_block *get_super (int dev);
extern int ROOT_DEV;
*/
// 安装根文件系统
extern int mount_root (void);

⌨️ 快捷键说明

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