Created by: hjg0603
- os/src/fs/vfs.rs — VfsNode trait 扩展
添加 sync(&self) -> isize 方法(默认返回 0),让文件节点可以将数据同步到磁盘 2. os/src/fs/mount.rs — MountedFs trait 扩展 + FsStatInfo
MountedFs trait 添加 statfs() 方法,返回 FsStatInfo 文件系统统计信息 MountedFs trait 添加 link(old, new) 方法(硬链接) MountedFs trait 添加 symlink(target, linkpath) 方法(符号链接创建) MountedFs trait 添加 readlink(path) 方法(读取符号链接目标) 新增 FsStatInfo 结构体(#[repr(C)],与 Linux struct statfs 布局一致) 3. os/src/fs/fat32_mount.rs — FAT32 适配
实现 statfs() 返回 FAT32 统计信息(f_type=0x4d44) 实现 link()/symlink() 返回 -38(ENOSYS,FAT32 不支持) 4. os/src/fs/ext4/fs.rs — EXT4 核心功能
新增 link_file(old_path, new_path) -> bool:硬链接实现,增加 i_links_count 并在目标目录添加目录项 新增 read_symlink(path) -> Option:读取符号链接目标,支持快速符号链接(≤60 字节存 i_block)和慢速符号链接(数据块读取) 5. os/src/fs/ext4_mount.rs — EXT4 MountedFs 适配
link() 调用 fs.lock().link_file() 实现硬链接 readlink() 调用 fs.lock().read_symlink() 读取符号链接 statfs() 从超级块读取统计信息(f_type=0xEF53) 6. os/src/drivers/block.rs — 块设备层
新增 pub fn get_block_device() -> Arc 公开函数,供 sys_mount 获取全局块设备 7. os/src/syscall/mod.rs — 系统调用分发
新增 SYSCALL_MOUNT: usize = 40 和 SYSCALL_UMOUNT2: usize = 39 常量 在 match 分发表中添加 SYSCALL_MOUNT 和 SYSCALL_UMOUNT2 的分发入口 8. os/src/syscall/fs.rs — 系统调用实现
重写 sys_fsync(fd):从 fd 获取 VfsNode,调用 node.sync() 真正同步数据 重写 sys_fdatasync(fd):当前等同于 sys_fsync 重写 sys_statfs(path, buf):通过 MOUNT_TABLE.lookup() 找到挂载的文件系统,调用 statfs() 获取真实统计信息 重写 sys_fstatfs(fd, buf):通过 fd 路径查找挂载点,调用 statfs() 重写 sys_linkat():调用 MountedFs::link() 创建硬链接 重写 sys_readlinkat():调用 MountedFs::readlink() 读取符号链接 新增 sys_mount(source, target, fstype, flags, data):动态挂载文件系统,支持 "fat32" 和 "ext4" 两种类型 新增 sys_umount2(target, flags):卸载文件系统