📄 ul_filesys.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 + -