os/vfs/
file_system.rs

1use crate::vfs::{FsError, Inode};
2use alloc::string::String;
3use alloc::sync::Arc;
4
5/// 文件系统 trait
6///
7/// 所有文件系统实现都必须实现此 trait
8pub trait FileSystem: Send + Sync {
9    /// 文件系统类型名称
10    ///
11    /// # 示例
12    /// - "ext4"
13    fn fs_type(&self) -> &'static str;
14
15    /// 获取根 inode
16    ///
17    /// 返回文件系统的根目录 inode
18    fn root_inode(&self) -> Arc<dyn Inode>;
19
20    /// 同步文件系统
21    ///
22    /// 将所有未写入的数据刷新到持久化存储
23    fn sync(&self) -> Result<(), FsError>;
24
25    /// 获取文件系统统计信息
26    fn statfs(&self) -> Result<StatFs, FsError>;
27
28    /// 卸载文件系统(可选)
29    ///
30    /// 执行卸载前的清理工作
31    fn umount(&self) -> Result<(), FsError> {
32        self.sync()
33    }
34}
35
36/// 文件系统统计信息
37#[derive(Debug, Clone)]
38pub struct StatFs {
39    /// 块大小(单位:字节)
40    pub block_size: usize,
41
42    /// 总块数
43    pub total_blocks: usize,
44
45    /// 空闲块数
46    pub free_blocks: usize,
47
48    /// 可用块数(非特权用户)
49    pub available_blocks: usize,
50
51    /// 总 inode 数
52    pub total_inodes: usize,
53
54    /// 空闲 inode 数
55    pub free_inodes: usize,
56
57    /// 文件系统 ID
58    pub fsid: u64,
59
60    /// 最大文件名长度
61    pub max_filename_len: usize,
62}