Inode

Trait Inode 

Source
pub trait Inode:
    Send
    + Sync
    + Any {
Show 22 methods // Required methods fn metadata(&self) -> Result<InodeMetadata, FsError>; fn read_at(&self, offset: usize, buf: &mut [u8]) -> Result<usize, FsError>; fn write_at(&self, offset: usize, buf: &[u8]) -> Result<usize, FsError>; fn lookup(&self, name: &str) -> Result<Arc<dyn Inode>, FsError>; fn create( &self, name: &str, mode: FileMode, ) -> Result<Arc<dyn Inode>, FsError>; fn mkdir( &self, name: &str, mode: FileMode, ) -> Result<Arc<dyn Inode>, FsError>; fn symlink( &self, name: &str, target: &str, ) -> Result<Arc<dyn Inode>, FsError>; fn link(&self, name: &str, target: &Arc<dyn Inode>) -> Result<(), FsError>; fn unlink(&self, name: &str) -> Result<(), FsError>; fn rmdir(&self, name: &str) -> Result<(), FsError>; fn rename( &self, old_name: &str, new_parent: Arc<dyn Inode>, new_name: &str, ) -> Result<(), FsError>; fn readdir(&self) -> Result<Vec<DirEntry>, FsError>; fn truncate(&self, size: usize) -> Result<(), FsError>; fn sync(&self) -> Result<(), FsError>; fn as_any(&self) -> &dyn Any; fn set_times( &self, atime: Option<TimeSpec>, mtime: Option<TimeSpec>, ) -> Result<(), FsError>; fn readlink(&self) -> Result<String, FsError>; fn mknod( &self, name: &str, mode: FileMode, dev: u64, ) -> Result<Arc<dyn Inode>, FsError>; fn chown(&self, _uid: u32, _gid: u32) -> Result<(), FsError>; fn chmod(&self, _mode: FileMode) -> Result<(), FsError>; // Provided methods fn set_dentry(&self, _dentry: Weak<Dentry>) { ... } fn get_dentry(&self) -> Option<Arc<Dentry>> { ... }
}
Expand description

文件系统底层存储接口

Inode 代表文件系统中的一个文件或目录,提供无状态的随机访问。

§设计要点

  • 所有读写方法必须携带 offset 参数(体现随机访问能力)
  • 不维护会话状态(offset 由上层 File 维护)
  • 支持目录操作(lookup、create、mkdir、unlink)

Required Methods§

Source

fn metadata(&self) -> Result<InodeMetadata, FsError>

获取文件元数据

Source

fn read_at(&self, offset: usize, buf: &mut [u8]) -> Result<usize, FsError>

从指定偏移量读取数据

多次调用相同参数应返回相同结果(无副作用)。

Source

fn write_at(&self, offset: usize, buf: &[u8]) -> Result<usize, FsError>

向指定偏移量写入数据

Source

fn lookup(&self, name: &str) -> Result<Arc<dyn Inode>, FsError>

在目录中查找子项

返回子项的 Inode。仅对目录有效。

Source

fn create(&self, name: &str, mode: FileMode) -> Result<Arc<dyn Inode>, FsError>

在目录中创建文件

Source

fn mkdir(&self, name: &str, mode: FileMode) -> Result<Arc<dyn Inode>, FsError>

在目录中创建子目录

创建符号链接

创建硬链接

删除普通文件/链接

Source

fn rmdir(&self, name: &str) -> Result<(), FsError>

删除目录

Source

fn rename( &self, old_name: &str, new_parent: Arc<dyn Inode>, new_name: &str, ) -> Result<(), FsError>

重命名/移动 (原子操作)

Source

fn readdir(&self) -> Result<Vec<DirEntry>, FsError>

列出目录内容

Source

fn truncate(&self, size: usize) -> Result<(), FsError>

截断文件到指定大小

Source

fn sync(&self) -> Result<(), FsError>

同步文件数据到存储设备

Source

fn as_any(&self) -> &dyn Any

向下转型为 &dyn Any,用于支持 downcast

Source

fn set_times( &self, atime: Option<TimeSpec>, mtime: Option<TimeSpec>, ) -> Result<(), FsError>

设置文件时间戳

读取符号链接的目标路径

Source

fn mknod( &self, name: &str, mode: FileMode, dev: u64, ) -> Result<Arc<dyn Inode>, FsError>

创建设备文件节点

Source

fn chown(&self, _uid: u32, _gid: u32) -> Result<(), FsError>

修改文件所有者和组

§参数
  • uid - 新的用户 ID(u32::MAX 表示不改变)
  • gid - 新的组 ID(u32::MAX 表示不改变)
§返回值
  • Ok(()) - 成功
  • Err(FsError) - 失败
§在单 root 用户系统中的行为

此方法会更新 inode 的 uid/gid 字段,但不进行权限检查。 所有调用都会成功(除非文件系统错误)。

Source

fn chmod(&self, _mode: FileMode) -> Result<(), FsError>

修改文件权限模式

§参数
  • mode - 新的权限模式(只修改权限位,不修改文件类型位)
§返回值
  • Ok(()) - 成功
  • Err(FsError) - 失败
§在单 root 用户系统中的行为

此方法会更新 inode 的 mode 字段,但不进行权限检查。 所有调用都会成功(除非文件系统错误)。

Provided Methods§

Source

fn set_dentry(&self, _dentry: Weak<Dentry>)

设置 Dentry(可选方法)

Source

fn get_dentry(&self) -> Option<Arc<Dentry>>

获取 Dentry(可选方法)

Implementations§

Source§

impl dyn Inode

Arc<dyn Inode> 提供向下转型辅助方法

Source

pub fn downcast_arc<T: Inode>(self: Arc<Self>) -> Result<Arc<T>, Arc<Self>>

尝试向下转型为具体的 Inode 类型

Source

pub fn downcast_ref<T: Inode>(&self) -> Option<&T>

尝试获取具体类型的引用

Implementors§