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§
Sourcefn metadata(&self) -> Result<InodeMetadata, FsError>
fn metadata(&self) -> Result<InodeMetadata, FsError>
获取文件元数据
Sourcefn read_at(&self, offset: usize, buf: &mut [u8]) -> Result<usize, FsError>
fn read_at(&self, offset: usize, buf: &mut [u8]) -> Result<usize, FsError>
从指定偏移量读取数据
多次调用相同参数应返回相同结果(无副作用)。
Sourcefn rename(
&self,
old_name: &str,
new_parent: Arc<dyn Inode>,
new_name: &str,
) -> Result<(), FsError>
fn rename( &self, old_name: &str, new_parent: Arc<dyn Inode>, new_name: &str, ) -> Result<(), FsError>
重命名/移动 (原子操作)
Sourcefn set_times(
&self,
atime: Option<TimeSpec>,
mtime: Option<TimeSpec>,
) -> Result<(), FsError>
fn set_times( &self, atime: Option<TimeSpec>, mtime: Option<TimeSpec>, ) -> Result<(), FsError>
设置文件时间戳
Sourcefn mknod(
&self,
name: &str,
mode: FileMode,
dev: u64,
) -> Result<Arc<dyn Inode>, FsError>
fn mknod( &self, name: &str, mode: FileMode, dev: u64, ) -> Result<Arc<dyn Inode>, FsError>
创建设备文件节点
Provided Methods§
Sourcefn set_dentry(&self, _dentry: Weak<Dentry>)
fn set_dentry(&self, _dentry: Weak<Dentry>)
设置 Dentry(可选方法)
Sourcefn get_dentry(&self) -> Option<Arc<Dentry>>
fn get_dentry(&self) -> Option<Arc<Dentry>>
获取 Dentry(可选方法)
Implementations§
Source§impl dyn Inode
为 Arc<dyn Inode> 提供向下转型辅助方法
impl dyn Inode
为 Arc<dyn Inode> 提供向下转型辅助方法
Sourcepub fn downcast_arc<T: Inode>(self: Arc<Self>) -> Result<Arc<T>, Arc<Self>>
pub fn downcast_arc<T: Inode>(self: Arc<Self>) -> Result<Arc<T>, Arc<Self>>
尝试向下转型为具体的 Inode 类型
Sourcepub fn downcast_ref<T: Inode>(&self) -> Option<&T>
pub fn downcast_ref<T: Inode>(&self) -> Option<&T>
尝试获取具体类型的引用